迭代所有节点对象,而不仅仅是元素对象
Iterate over all node objects not only element objects
我读了下面一篇非常好的文章:节点对象和元素对象的区别?以清除节点对象和元素对象之间的差异。我明白了
因此,在此之后,我遇到了以下查询:我可以通过哪种方式遍历所有节点对象?通过使用元素对象是节点对象的子集。
document.getElementsByTagName('*')
,我认为我得到了所有的元素对象,因为它们的.nodeType
属性都有值1。我是对的,如果是,我怎么能包括到我的结果所有这些节点不是元素?谢谢
我不相信有任何标准的DOM函数将返回每个 Node
(而不是Element
)在整个文档。
您可能必须使用递归DOM遍历来查找它们,如下所示:
function getAllNodes(parent, nodes) {
parent = parent || document;
nodes = nodes || [];
var child = parent.firstChild;
while (child) {
nodes.push(child);
if (child.hasChildNodes) {
getAllNodes(child, nodes);
}
child = child.nextSibling;
}
return nodes;
}
你可以直接写var nodes = getAllNodes()
,它会自动从文档根目录开始。
答案就在你的问题里。您使用document.getElementsByTagName
。让我再重复一遍。得到元素 ByTagName。
非元素节点没有标记名、标识符或类似的东西。指定它们的唯一方法是根据它们在文档结构中的位置。
您可以获取一个Element的引用,然后浏览它的childNodes,正如已经建议的那样。
另一种方法是使用XPath,它与CSS选择器不同,它能够直接指向任何Node,包括文本和注释节点。
document.evaluate("*", document.documentElement, null, XPathResult. UNORDERED_NODE_ITERATOR_TYPE)
相关文章:
- Ajax聊天消息重复而不仅仅是更新
- 鼠标悬停事件影响列表中所有行中的按钮,而不仅仅是特定按钮
- JS变量返回的对象不是值
- Mongoose TypeError:实例化模式类型的对象时,对象不是函数
- JavaScript对象不是从原型链继承的
- 事件为所有项目而不仅仅是当前项目激发
- 检查对象是否是mongo游标
- jQuery:对象不是函数
- 在加载时显示,而不仅仅是在选中时显示
- 删除 HttpCookie 不仅仅是它的值
- 脚本选择所有输入,而不仅仅是复选框
- 如何在画布中制作选择框以选择它接触的任何对象,而不仅仅是它所包含的对象
- AngularJS-循环推送整个对象,而不仅仅是标题
- ngModel,设置整个对象,而不仅仅是ngOptios中的值
- KnockoutJS正在更新数组中的所有对象,而不仅仅是一个对象
- 迭代所有节点对象,而不仅仅是元素对象
- 函数可以修改对象的参数,而不仅仅是属性
- 香草JS事件委托(不是CLICK事件),返回的不仅仅是文档对象
- 可以分配JavaScript原型对象而不仅仅是其属性吗
- 如何使用jQuery返回对象,而不仅仅是值