javascript nodeType是1,不管是什么?

Bin*_*gic 1 javascript jquery dom

我正在尝试使用jquery在页面上查找所有文本节点.但无论我选择哪个元素,nodeType始终为1:

$.each($('*'), function(index, el) { console.log(el.nodeType) });
Run Code Online (Sandbox Code Playgroud)

这导致控制台中只输出"1".并证明页面上有一个"文本节点":

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

$('p:first')[0].nodeType
=> 1
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?我正在使用safari 5.0.4.我在firefox 3.6.12中得到了相同的结果.

谢谢.

Fel*_*ing 9

jQuery只会选择元素节点.

$('p:first')实际上选择第一个<p>元素.要访问包含的文本节点,您需要访问firstChildDOM节点:

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

DEMO

也许你也有误解:包含文本的元素不是文本节点.使用标记创建的每个元素<..>都是元素节点.

例:

<p>
  Foo
  <span>Bar</span>
  Baz
</p>
Run Code Online (Sandbox Code Playgroud)

元素节点 <p>有三个孩子:两个文本节点,包含文本FooBaz,以及元素节点 <span>本身具有文本节点作为子,含有Bar.