JQuery: получить содержимое тега, исключая вложенные теги - PullRequest
5 голосов
/ 05 января 2010

У меня есть HTML-код, подобный следующему:

<span id="A">Text I'm interested in
  <span id="B">Other crap I don't care about</span>
</span>

Я хочу получить текстовое содержимое диапазона "A", исключая любые вложенные теги (т.е. содержимое диапазона "B" в приведенном выше примере). Я пытаюсь получить текстовое содержимое, а не содержимое HTML. Кроме того, в моем конкретном случае я знаю, что всегда будет какой-то текст внутри диапазона А до любых других тегов, но я также заинтересован в менее ограниченном решении.

Простой, но неуклюжий подход, который я рассмотрел, заключается в том, чтобы просто выполнить $ ("# A"). Html () и затем анализировать, пока я не нажму "не покинутый" <", но такое ощущение, что должен быть Чистое решение. </p>

Ответы [ 3 ]

6 голосов
/ 05 января 2010

Я вполне уверен, что нет встроенного способа сделать это - хотя вы можете искать плагин, он может существовать. Кто-то еще опубликовал метод .text () (но удалил сообщение), который получит вам ВСЕ текст, за исключением тегов, что означает, что вы получите «Текст, который меня интересует. - не то, что вы хотите.

EDIT

Хорошо, я решил, что мне это интересно, и потратил некоторое время. Вот решение:)

    copyOf = $('#A').clone();
    copysKids = copyOf.children();
    copysKids.remove();

    alert(copyOf.text());

Мы делаем клон узла, из которого вы пытаетесь получить текст - мы не хотим работать с оригиналом, потому что это изменит страницу. Затем мы собираем коллекцию всех дочерних узлов и обнуляем их. Оставшийся текст - это текст, который вы искали.

0 голосов
/ 21 февраля 2013

Для конкретного примера ОП правильное решение будет

$('#A').prop('firstChild').nodeValue

Это нужно было бы немного проработать, если бы вы хотели надежное решение, которое бы обрабатывало ситуацию, когда один или несколько первых N дочерних элементов были тегами, а не текстовыми узлами.

0 голосов
/ 05 января 2010

Следующий должен получить его для вас

$("#A").find("#B").remove().end().text());

Это очень специфично для вашей проблемы. Не уверен, что есть универсальное решение, хотя

...