2011-03-13 4 views
1

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

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

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

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

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

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

Спасибо.

ответ

9

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.

+0

Это правда. Вся предпосылка jQuery использует селекторов типа CSS для выбора элементов. – jpsimons

+1

@Binary Logic Вот еще один ответ, в котором описывается, как найти все текстовые узлы с помощью jQuery: http://stackoverflow.com/questions/298750/how-do-i-select-text-nodes-with-jquery/4399718# 4399718 –

Смежные вопросы