javascript nodeType 无论如何都是 1?

标签 javascript jquery dom

我正在尝试使用 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

DEMO

也许你也有一个误区:包含文本的元素不是文本节点。您使用标签创建的每个元素 <..>是一个元素节点。

例子:

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

元素节点 <p>有三个 child :两个文本节点,包含文本 FooBaz , 和一个元素节点 <span>它本身有一个文本节点作为子节点,包含Bar .

关于javascript nodeType 无论如何都是 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5291354/

相关文章:

Javascript:单击更改颜色并禁用其余图标

javascript - 列中所有行的 DataTables 超链接

javascript - 在 JavaScript/jQuery 中捕获 Ctrl-Alt-Del

javascript - 在html文件中添加脚本标签

javascript - 如何从 URL 中的哈希中获取搜索查询

javascript - 如何将表单作为 JSON 对象提交

javascript - 将函数与对象绑定(bind)到 jQuery 'change' 事件处理程序

javascript - &lt;iframes> 和通过 AJAX 延迟 window.onload 加载的图像吗?

javascript - 打破 'enter' 键与表单提交的关联

javascript - 如何在phonegap android中生成pdf417条形码