javascript检查DOM元素是否存在最佳实践

时间:2013-03-05 11:42:46

标签: javascript jquery

检查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
}

但是,如果没有找到它会引发异常吗?

5 个答案:

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