Как сделать чтобы text() брал только текст родителя без текста вложенных контейнеров?
(Требуется реализовать некое подобие цитирования.)
Есть див. В нем перемежаются дивы и текст. Например так: <div class="a"> 123 <div>абв</div> 456 <div>где</div> </div> Метод text берет весь текст включая текст вложенных элементов (как и написано в доках), т.е.: $('.a').text() вернет 123абв456где Требуется получить только текст 123456. Пока надумал такие варианты: 1) [ОТПАДАЕТ сразу] брать вначале общий текст, потом текст всех дочерних элементов, потом replace и заменять. ОТПАДАЕТ сразу по причине того что в дочернем диве может быть например одна буквы и мы лишимся всех букв. 2) [не нравится реализация] копировать innerhtml в невидимый контейнер, потом в этом контейнере удалять дочерние блоки, только потом брать текст. Какое то странное решение 3) забрать аяксом. Плюсы - могу оформить вложенные дивы как надо (там некое подобие цитат из ББкода). Минусы - задержка и нагрузка (которых очень не хотелось бы) и смысла в этом нет, потому что для цитаты достаточно текста родительского поста. Может кто подскажет, а то уже к концу недели ничего дельного в голову не лезет :( |
Как-то так:
var str = '';
$('.a').each(function(){
var cN = this.childNodes;
for (var i=0, l=cN&&cN.length||0; i<l; i++) {
if (cN[i].nodeType == 3 && String(cN[i].nodeValue).split(/\s/).join('')) {
str += cN[i].nodeValue;
}
}
});
|
ну либо искать плагин :)
либо пройтись по childNode'ам пропуская элементы |
Большое спасибо. Плагин не понадобится ;) пойду читать доки по чистому js полезно мне чувству будет :)), а то с jquery подотупел ))
|
| Часовой пояс GMT +3, время: 04:38. |