检查javascript中是否存在DOM元素的最佳做法是什么?
在使用之前是否应该检查某个项目是否存在,如此?
if ($("#" + machineId + packageId.removeSpecialChars().toUpperCase() + "").size() != 0) {
var row = $("#" + machineId + packageId.removeSpecialChars().toUpperCase() + "");
}
这不会执行packageId.removeSpecialChars().toUpperCase()
两次吗?
或者这会是更好的选择吗?
var row = $("#" + machineId + packageId.removeSpecialChars().toUpperCase() + "");
if (row)
{
// do something
}
但是,如果没有找到它会引发异常吗?
答案 0 :(得分:21)
当您实际使用DOM元素时,是的,您应该在尝试使用它之前检查它是否存在以避免JavaScript错误。但是,你不使用DOM元素,你正在使用一个(可能)包含DOM元素的jQuery对象。
jQuery函数已经处理了其元素集中没有匹配项的情况,因此在尝试使用它们之前,您不需要自己检查是否存在元素。如果您尝试使用.get()
函数或[index]
方括号表示法直接引用该集合中的DOM元素,则只需要这样做。
另外,在版本1.8中不推荐使用.size()
jQuery函数,你应该直接使用jQuery对象的length
属性来检查是否有元素,所以:
var $object = $('a-selector');
if($object.length) {
// there's at least one matching element
}
答案 1 :(得分:1)
一般编程惯例说不要重复。因此,在这种情况下,您至少可以只查找一次该事物并保留变量引用:
var thing = $("#" + machineId + packageId.removeSpecialChars().toUpperCase() + "");
然后选择查找不会发生两次,删除冗余方法调用等。这样做的好处是可以让你编写更多不言自明的代码,当你可以将变量命名为有意义的东西,而不是{{1 },或者, eeek!,thing
(尽管代码必须更有意义,但仍然使用{{1}等名称}}!)
a
对于多次调用方法,这通常是不可避免的。
答案 2 :(得分:1)
最好缓存它:
var machId = $("#" + machineId + packageId.removeSpecialChars().toUpperCase());
if (machId.size() != 0) {
var row = machId;
}
答案 3 :(得分:0)
确实如此,你需要的是:
var a = $("#" + machineId + packageId.removeSpecialChars().toUpperCase() + "");
if (a.size()) {
var row = a;
}
答案 4 :(得分:0)
你基本上需要看看你的HTML中是否存在DOM元素,但请记住,如果你的DOM中不存在该元素,jQuery不会抛出致命错误,但这是一个很好的检查方法,它会添加在你的代码中有一个更安全的层,有一个名为.size()的东西,从版本1.8弃用,因此即使你使用旧版本的jQuery也不建议使用,所以目前最好的解决方案就是下面代码:< / p>
if($('.class').length) { // check if any element with this class exist, if not exist, it return 0 and can not pass the if estatement
// do something
}