后备无关紧要。请不要图书馆。
我们有一个dom对象引用,我们将调用obj
。它实际上是一个event.target。
我们有一个节点列表,我们将调用nodes
,我们已经使用querySelectorAll和变量选择器。
nodes
可能包含1个或多个元素,每个元素都可能有子元素。
我们需要确定obj
是否是那些节点元素之一,或者是那些节点元素的子元素。我们在这里寻找“本机”浏览器功能,我们可以编写自己的for
循环并完成此操作,我们正在寻找替代方案。
类似的东西:
nodes.contains(obj)
或nodes.indexof(obj)
涉及检索节点列表以匹配的其他方法的解决方案是可以接受的,但我不知道那些可能是什么。
答案 0 :(得分:9)
我不确定这是否会搜索NodeList的第一级,但是你可以递归地使用这个表达式遍历它并检查元素'obj'是否在NodeList'节点'中。
[].indexOf.call(nodes, obj)
答案 1 :(得分:5)
如果<= IE11不是问题,那么我认为最干净的方法是使用Array.from
Array.from(nodes).find(node => node === nodeRefToFind);
我不完全确定您是否可以依赖这样的节点引用,但是也可以在节点上搜索其他属性(例如id,class或其他属性)。
答案 2 :(得分:4)
我做了类似的事情:
Array.prototype.find.call(style.childNodes, function(child) {
if(child.textContent.includes(drawer.id)) {
console.log(child);
}
});
似乎工作。然后child是另一个html节点,你可以随意操作它。
答案 3 :(得分:2)
我认为没有内置的DOM方法。您需要以递归方式遍历您的NodeList
,并检查您的元素是否相等。另一种选择是在NodeList
的每个第一级元素上使用Element.querySelectorAll
(例如,查找元素的ID)。不过,我不确定(inn)的效率如何。
答案 4 :(得分:0)
除了作为函数的多米尼克的回答:
function nodelist_contains (nodelist, obj)
{
if (-1 < Array.from (nodelist).indexOf (obj))
return true;
return false;
}