我正在尝试使用 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 中得到了相同的结果。
谢谢。
最佳答案
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
也许你也有一个误区:包含文本的元素不是文本节点。您使用标签创建的每个元素 <..>
是一个元素节点。
例子:
<p>
Foo
<span>Bar</span>
Baz
</p>
元素节点 <p>
有三个 child :两个文本节点,包含文本 Foo
和 Baz
, 和一个元素节点 <span>
它本身有一个文本节点作为子节点,包含Bar
.
关于javascript nodeType 无论如何都是 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5291354/