javascript nodeType равен 1, несмотря ни на что? - PullRequest
1 голос
/ 13 марта 2011

Я пытаюсь найти все текстовые узлы на странице, используя jquery. Но независимо от того, какой элемент я выбираю, nodeType всегда равен 1:

$.each($('*'), function(index, el) { console.log(el.nodeType) });

В результате ничего, кроме "1", выводится в консоли. И чтобы доказать, что на странице есть «текстовый узел»:

$('p:first').html()
=> "
            I'm text
          "

$('p:first')[0].nodeType
=> 1

Что мне здесь не хватает? Я использую Safari 5.0.4. Я получаю тот же результат в Firefox 3.6.12.

Спасибо.

1 Ответ

9 голосов
/ 13 марта 2011

jQuery будет выбирать только узлы элементов.

$('p:first') фактически выбирает первый элемент <p>. Для доступа к содержащемуся текстовому узлу вам потребуется доступ к firstChild на узле DOM:

alert($('p:first')[0].nodeName) // alerts P                 <-- element node
alert($('p:first')[0].firstChild.nodeName) // alerts #text  <-- text node

DEMO

Возможно, у вас также есть недоразумение: элементы, содержащие текст, не являются текстовыми узлами. Каждый элемент, который вы создаете с тегами <..>, является узлом элемента.

Пример:

<p>
  Foo
  <span>Bar</span>
  Baz
</p>

Элемент <p> имеет трех дочерних элементов: два текстовых узла , содержащие текст Foo и Baz, и элементный узел <span>, который сам имеет текстовый узел в качестве дочернего элемента, содержащий Bar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...