如何在不使用该getElementById方法的情况下测试元素是否存在?
getElementById
我已经设置了一个现场演示供参考。我还将在这里打印代码:
<!DOCTYPE html> <html> <head> <script> var getRandomID = function (size) { var str = "", i = 0, chars = "0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ"; while (i < size) { str += chars.substr(Math.floor(Math.random() * 62), 1); i++; } return str; }, isNull = function (element) { var randomID = getRandomID(12), savedID = (element.id)? element.id : null; element.id = randomID; var foundElm = document.getElementById(randomID); element.removeAttribute('id'); if (savedID !== null) { element.id = savedID; } return (foundElm) ? false : true; }; window.onload = function () { var image = document.getElementById("demo"); console.log('undefined', (typeof image === 'undefined') ? true : false); // false console.log('null', (image === null) ? true : false); // false console.log('find-by-id', isNull(image)); // false image.parentNode.removeChild(image); console.log('undefined', (typeof image === 'undefined') ? true : false); // false ~ should be true? console.log('null', (image === null) ? true : false); // false ~ should be true? console.log('find-by-id', isNull(image)); // true ~ correct but there must be a better way than this? }; </script> </head> <body> <div id="demo"></div> </body> </html>
基本上,上面的代码演示了一个元素被存储到一个变量中,然后从 DOM 中删除。即使该元素已从 DOM 中删除,该变量仍会保留该元素,因为它与第一次声明时一样。换句话说,它不是对元素本身的实时引用,而是一个副本。因此,检查变量的值(元素)是否存在将提供意想不到的结果。
该isNull函数是我尝试从变量中检查元素是否存在,并且它有效,但我想知道是否有更简单的方法来完成相同的结果。
isNull
PS:如果有人知道一些与该主题相关的好文章,我也对为什么 JavaScript 变量的行为如此感兴趣。
似乎有些人在这里登陆,只是想知道一个元素是否 存在 (与原始问题有点不同)。
这就像使用任何浏览器的选择方法一样简单,并检查它的 真实 值(通常)。
例如,如果我的元素有idof "find-me",我可以简单地使用…
id
"find-me"
var elementExists = document.getElementById("find-me");
这被指定为返回对元素的引用或null. 如果你必须有一个布尔值,只需!!在方法调用之前扔一个。
null
!!
此外,您可以使用现有的许多其他方法来查找元素,例如 (all living off document):
document
querySelector()
querySelectorAll()
getElementsByClassName()
getElementsByName()
其中一些方法返回 a NodeList,所以一定要检查它的length属性,因为 aNodeList是一个对象,因此是 真的 。
NodeList
length
为了实际确定元素是否作为可见 DOM 的一部分存在(就像最初提出的问题一样),Csuwldcat 提供了比滚动自己更好的解决方案(因为这个答案曾经包含)。也就是说,在 DOM 元素上使用该方法。contains()
contains()
你可以这样使用它…
document.body.contains(someReferenceToADomElement);