2010-07-05 5 views
1

je sélectionne certains paragraphes dans un div:JQuery: Ajout d'espace entre les sélections multiples

$('#myDiv p.p1, #myDiv p.p2').text(); 

Mon problème est que je veux ajouter un espace entre chaque sélection de telle sorte que la sortie est: « paragraphe 1 (espace) paragraphe 2 » au lieu de "paragraph1paragraph2".

Des idées?

Répondre

6

Vous pouvez utiliser .map() avec .get() pour créer un tableau des paragraphes séparés, puis utiliser .join(" ") pour les joindre avec un espace entre.

Essayez ceci:

var result = $('#myDiv p.p1, #myDiv p.p2').map(function() { 
    return $.text([this]); 
    // return this.innerHTML;    // Alternate means of getting text 
    // return this.firstChild.nodeValue; // Another alternate 
}).get().join(" "); 

La variable result devrait avoir vos paragraphes avec un espace qui les sépare.

EDIT: Sur la base de commentaires de @ J-P, mis à jour la récupération de texte pour être plus efficace.

+1

+1, bien que je pense que '.text de $ ([ce])' sera un peu plus rapide que la construction d'un nouvel objet jQ avec '$ (this)' ... – James

+0

@JP: Bon point. Je vais mettre à jour. : o) – user113716

+0

+1, solution la plus rapide. –

-1

Cela fera l'affaire:

$('#myDiv p.p1, #myDiv p.p2').clone().append(' ').text() 
+0

Quel est le problème avec cette solution depuis que quelqu'un l'a rejeté? C'est beaucoup plus simple que les patricks. – HelpMe

+0

Gert - Bien que je n'aie pas voté contre vous (je n'aime pas faire ça contre des réponses concurrentes), j'imagine que c'est parce que vous faites des modifications DOM inutiles, et que les modifications DOM sont lentes. – user113716

+0

@Thariama, @Gert - Juste fait un test rapide (dans Firefox seulement) en comparant les deux dans une boucle de 1000 itérations. La modification DOM a pris environ 2 200 ms, la mienne a pris environ 100 ms. Évitez le DOM quand vous le pouvez. : o) – user113716

Questions connexes