2010-09-02 7 views
8

Étant donné un nombre inconnu d'entrées texte dynamiquement.jQuery - Meilleure façon de tirer plusieurs (val) dans une chaîne

for (var i = 0; i < numInputs2Render; i++) { 
    collectEmails = collectEmails + '<input type="text" id="Email' + i + '" name="Email' + i + '">'; 
} 

je dois produire une chaîne délimitée par des virgules des valeurs d'entrée combinées. Est-ce que jQuery me donne une solution en une étape ou est-ce que j'ai besoin d'itérer et de construire manuellement la chaîne? (Si si manuellement ... Comment est ce regard?)

thx

Répondre

23

Vous pouvez utiliser .map(), comme ceci:

var emails = $("input[name^=Email]").map(function() { return this.value; }) 
            .get().join(','); 

Il utilise le attribute-starts-with selector pour trouver les entrées, puis .map() pour obtenir le valeurs dans un tableau, vous pouvez .join() en une seule chaîne. Si elles sont dans un conteneur, disons <div id="Emails">, vous pouvez réduire le sélecteur à quelque chose comme $("#Emails input"), je ne peux pas dire avec certitude sans voir votre balisage, mais n'importe quoi avec un sélecteur de conteneur le rendra plus efficace.

+2

+1 48 secondes plus rapidement;) Une classe pourrait également être ajoutée aux éléments ... –

+0

@Fixix - D'accord, ou si nous avions un peu plus de contexte, ils sont probablement tous dans un seul conteneur, vu leur mode de fonctionnement. être généré. –

+0

En effet - j'ai tiré le 'class = emailInput' de l'OP par souci de brièveté. Comment cela changerait-il la réponse? - très apprécié! – justSteve

Questions connexes