js在nodeList中找到对象?

时间:2012-10-19 18:45:09

标签: javascript object nodes

后备无关紧要。请不要图书馆。

我们有一个dom对象引用,我们将调用obj。它实际上是一个event.target。

我们有一个节点列表,我们将调用nodes,我们已经使用querySelectorAll和变量选择器。

nodes可能包含1个或多个元素,每个元素都可能有子元素。

我们需要确定obj是否是那些节点元素之一,或者是那些节点元素的子元素。我们在这里寻找“本机”浏览器功能,我们可以编写自己的for循环并完成此操作,我们正在寻找替代方案。

类似的东西:

nodes.contains(obj)nodes.indexof(obj)

涉及检索节点列表以匹配的其他方法的解决方案是可以接受的,但我不知道那些可能是什么。

5 个答案:

答案 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;
}