Ran*_*all 9 javascript object nodes
后备是无关紧要的.请不要图书馆.
我们有一个dom对象参考,我们会打电话obj.它实际上是一个event.target.
我们有一个节点列表,我们将调用nodes,我们使用querySelectorAll和变量选择器.
nodes 可以有1个或多个元素,每个元素都可以有子元素.
我们需要确定是否obj是那些节点元素之一,或者是那些节点元素的子元素.我们在这里寻找"本机"浏览器功能,我们可以编写自己的for循环并完成此操作,我们正在寻找替代方案.
就像是:
nodes.contains(obj) 要么 nodes.indexof(obj)
涉及检索节点列表以匹配的其他方法的解决方案是可以接受的,但我不知道那些可能是什么.
Kth*_*rog 11
I'm not sure if this will search beyond the first level of the NodeList, but you can use this expression recursively to traverse it and check if the element 'obj' is in the NodeList 'nodes'.
[].indexOf.call(nodes, obj)
Run Code Online (Sandbox Code Playgroud)
Dom*_*nic 10
如果 <=IE11 不是问题,那么我认为最干净的方法是使用Array.from
Array.from(nodes).find(node => node === nodeRefToFind);
Run Code Online (Sandbox Code Playgroud)
我不完全确定您是否可以依赖这样的节点引用,但您也可以在节点上搜索其他一些属性(例如 id、class 或其他属性)。
我做了这样的事情:
Array.prototype.find.call(style.childNodes, function(child) {
if(child.textContent.includes(drawer.id)) {
console.log(child);
}
});
Run Code Online (Sandbox Code Playgroud)
似乎工作。然后 child 是另一个 html 节点,您可以随意操作它。
我不认为有一个内置的 DOM 方法。您需要递归遍历您的NodeList,并检查与您的元素是否相等。另一种选择是Element.querySelectorAll在您的每个第一级元素上使用NodeList(例如,查找元素的 id)。不过,我不确定(旅馆)的效率如何。
| 归档时间: |
|
| 查看次数: |
8302 次 |
| 最近记录: |