Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.05.2009, 20:01
Andrey32
 
Сообщений: n/a

Как сделать чтобы text() брал только текст родителя без текста вложенных контейнеров?
(Требуется реализовать некое подобие цитирования.)
Есть див. В нем перемежаются дивы и текст. Например так:
<div class="a">
123
<div>абв</div>
456
<div>где</div>
</div>

Метод text берет весь текст включая текст вложенных элементов (как и написано в доках), т.е.:
$('.a').text() вернет 123абв456где

Требуется получить только текст 123456.


Пока надумал такие варианты:
1) [ОТПАДАЕТ сразу] брать вначале общий текст, потом текст всех дочерних элементов, потом replace и заменять. ОТПАДАЕТ сразу по причине того что в дочернем диве может быть например одна буквы и мы лишимся всех букв.
2) [не нравится реализация] копировать innerhtml в невидимый контейнер, потом в этом контейнере удалять дочерние блоки, только потом брать текст. Какое то странное решение
3) забрать аяксом. Плюсы - могу оформить вложенные дивы как надо (там некое подобие цитат из ББкода). Минусы - задержка и нагрузка (которых очень не хотелось бы) и смысла в этом нет, потому что для цитаты достаточно текста родительского поста.

Может кто подскажет, а то уже к концу недели ничего дельного в голову не лезет
Ответить с цитированием
  #2 (permalink)  
Старый 22.05.2009, 20:15
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Как-то так:
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;
    }
  }
});

Последний раз редактировалось e1f, 22.05.2009 в 20:26.
Ответить с цитированием
  #3 (permalink)  
Старый 22.05.2009, 20:17
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

ну либо искать плагин
либо пройтись по childNode'ам пропуская элементы
Ответить с цитированием
  #4 (permalink)  
Старый 23.05.2009, 01:33
Andrey32
 
Сообщений: n/a

Большое спасибо. Плагин не понадобится пойду читать доки по чистому js полезно мне чувству будет ), а то с jquery подотупел ))
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При клике ссылки, открыть DIV блок, и при клике ещё раз, закрыть его Simon Общие вопросы Javascript 59 28.05.2017 18:31
Как сделать, чтобы 2 ссылки отображались как hover при наведении мышкой на любую? Ava Элементы интерфейса 5 19.05.2009 23:24