Как сделать чтобы 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, время: 05:11. |