如何检查一个id是否存在于DOM中(已经使用长度概念)

How to check if an id exists in the DOM (already use length concept)?

本文关键字:DOM 存在 检查 何检查 一个 是否 id      更新时间:2023-09-26

如何检查DOM中是否存在id ?我使用了长度概念,但它给出了错误的结果。我在演示中使用jstree插件。我想检查节点是否存在。我用了这个

if ($('#b-a-1').length) {
    alert("yes")
}
else {
    alert("no")
}

然而,当我运行它时,它给出了一个"no"的警告,但它已经存在于DOM中。为什么会这样?

这是我的小提琴链接:http://jsfiddle.net/fuu94/179/

可以使用$('#tree').jstree(true).get_node("b-a-1")命令查询指定id的节点是否存在。如果节点不存在,get_node方法返回false。下面是一个例子:

    if($('#tree').jstree(true).get_node("b-a-1")) 
    {
      alert("yes")
    }else{
      alert("no")  
    }

我还根据你的小提琴创建了一个新的小提琴来展示。http://jsfiddle.net/mXyHL/4/

编辑:只是想指出,这实际上是在DOM中没有搜索,因为,正如jfriend00和kmoe已经指出的那样,你正在寻找的元素是折叠的,不存在于DOM中。然而,该方法告诉您jtree是否包含具有指定id的节点。

当您使用.jstree()初始化jstree插件时,它会折叠节点并删除子li元素,包括id为b-a-1的元素。

然后,当您单击展开b节点时,它将再次创建子li元素。如果此时单击checkId按钮,它将提示"是"。

提示:使用浏览器的检查器(F12)来查看这些元素的创建时间。

这与jstree插件有关。如果您删除了该代码,那么项目就在那里,您的代码就可以工作了。

看起来插件实际上已经从DOM中删除了折叠的项目,所以常规的DOM查询不会找到它们,直到它们被扩展,因为它们不在DOM中。如果在DOM检查器中查看顶层项是否全部折叠,您将看到b-a-1项不在DOM中,因此jQuery选择器无法找到它。展开它,你可以看到它,然后你的jQuery选择器找到它。