2010-07-05 4 views
1

я выбрать несколько абзацев внутри DIV:JQuery: Добавление пространства между несколькими выборами

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

Моей проблема заключается в том, что я хочу, чтобы добавить пространства между каждым выбором, так что выход: «PARAGRAPH1 (пробел) PARAGRAPH2» а не «параграф 1 параграф2».

Любые идеи?

ответ

6

Вы можете использовать .map() с .get(), чтобы создать массив отдельных абзацев, затем используйте .join(" "), чтобы присоединиться к ним вместе с промежутком между ними.

Попробуйте это:

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(" "); 

Переменную result должны иметь абзацы с отступом разделяющих их.

EDIT: Основываясь на комментарий от @ J-P, обновленный текст извлечения, чтобы быть более эффективным.

+1

+1, хотя я думаю, что '$ .text ([это])' будет немного быстрее, чем строительство нового объекта JQ с '$ (это)' ... – James

+0

@JP: Хорошая точка. Я обновлю. : o) – user113716

+0

+1, самое быстрое решение. –

-1

Это будет делать трюк:

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

Что не так с этим решением, так как кто-то проголосовал за него? Его гораздо проще, чем patricks. – HelpMe

+0

Gert - Хотя я не проголосовал за вас (я не люблю делать это против конкурирующих ответов), я думаю, это потому, что вы делаете ненужные модификации DOM, а модификации DOM медленны. – user113716

+0

@Thariama, @Gert - Просто сделал быстрый тест (только в Firefox), сравнив два в цикле из 1000 итераций. Модификация DOM заняла около 2200 мс, моя заняла около 100 мс. Избегайте DOM, когда сможете. : o) – user113716