如何在 jQuery 中检查空对象

IT技术 javascript jquery dom object null
2021-03-10 11:35:30

我正在使用 jQuery,我想检查页面中是否存在某个元素。我写了以下代码,但它不起作用:

if($("#btext" + i) != null) {
    //alert($("#btext" + i).text());
    $("#btext" + i).text("Branch " + i);
}

如何检查元素的存在?

6个回答

检查jQuery 常见问题...

您可以使用选择器返回的 jQuery 集合的 length 属性:

if ( $('#myDiv').length ){}
@numediaweb,eleotlecram 没有说要避免.length
2021-04-24 11:35:30
正如eleotlecram所说;最好避免 .length
2021-04-30 11:35:30
但是......你不会得到“无法读取空值的属性'长度'”错误吗?
2021-05-01 11:35:30
你怎么看 var _myDiv = $('#myDiv'); ... .... if(_myDiv.lenght) {...} 产生异常。
2021-05-13 11:35:30
@AurelianoBuendia,您使用了lenght代替length这是一个拼写错误。
2021-05-17 11:35:30

(因为我似乎没有足够的声誉来否决答案......)

写道:

在 undefined 或 null 对象上调用 length 属性将导致 IE 和 webkit 浏览器失败!

而是试试这个:

 // NOTE!! THE FOLLOWING IS WRONG; DO NOT USE!  -- EleotleCram
if($("#something") !== null){
  // do something
}

或者

 // NOTE!! THE FOLLOWING IS WRONG; DO NOT USE!  -- EleotleCram
if($("#something") === null){
  // don't do something
}

虽然在 undefined 或 null 对象上调用 length 属性确实会导致浏览器失败,但 jQuery 的选择器($('...'))的结果永远不会为 null 或 undefined。因此,代码建议毫无意义。使用其他答案之一,它们更有意义。


(2012 年更新)因为人们看代码,这个答案在列表中名列前茅:在过去的几年里,我一直在使用这个小插件:

  jQuery.fn['any'] = function() {
     return (this.length > 0);
  };

我认为$('div').any()$('div').length读起来更好,而且你不会因为拼写错误而受苦:$('div').ayn()会出现运行时错误, $('div').lenght很可能总是假的。

__
2012 年 11 月编辑:

1)因为人们倾向于看代码而不是阅读代码周围所说的内容,所以我在 Wolf 的引用代码中添加了两个大警告讲师注释。
2)我添加了我用于这种情况的小插件的代码。

好答案。我很抱歉人们误解了它。
2021-05-01 11:35:30
@VovaPopov:我建议您下次多花一点时间阅读答案。我只是说“由 Wolf”编写的代码示例是不正确的。我从来没有提供过答案,只是参考了一些更有意义的其他答案。
2021-05-17 11:35:30

查找函数返回匹配元素的数组。您可以检查长度是否为零。请注意更改为仅查找元素一次并根据需要重用结果。

var elem = $("#btext" + i);
if (elem.length != 0) {
   elem.text("Branch " + i);
}

另外,您是否尝试过只使用 text 函数——如果不存在元素,它什么都不做。

$("#btext" + i).text("Branch " + i);
0 是一个假值,所以 elem.length 表达式的计算结果为假 - 换句话说,不需要 '!= 0' 部分
2021-04-28 11:35:30
@999,我认为对零的检查使代码更具可读性,尽管对于习惯于脚本语言的人来说,这两种方式都可能是可读的。
2021-05-06 11:35:30

jquery $() 函数总是返回非空值 - 意味着与您的选择器 cretaria 匹配的元素。如果未找到该元素,它将返回一个空数组。所以你的代码看起来像这样 -

if ($("#btext" + i).length){
        //alert($("#btext" + i).text());
    $("#btext" + i).text("Branch " + i);
}
我不认为 $()​​ 返回一个数组是真的。jQuery 对象具有类似于数组的行为,但我不认为它们实际上是数组,而且我认为您会发现并非它们的所有行为都与数组相同。请参阅此快速演示
2021-05-21 11:35:30

在 jQuery 1.4 中你得到了 $.isEmptyObject 函数,但是如果你被迫像我们这些可怜的 Drupal 开发者一样被迫使用旧版本的 jQ,只需窃取使用这个代码:

// This is a function similar to the jQuery 1.4 $.isEmptyObject.
function isObjectEmpty(obj) {
  for ( var name in obj ) {
    return false;
  }
  return true;
}

像这样使用它:

console.log(isObjectEmpty(the_object)); // Returns true or false.
这并没有解决问题。
2021-05-20 11:35:30