如何检查jQuery中的空对象

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

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

我如何检查元素的存在?

检查jQuery常见问题 …

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

 if ( $('#myDiv').length ){} 

(因为我没有足够的声望来回答这个问题…)

沃尔夫写道:

调用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 } 

虽然确实调用未定义或空对象的length属性会导致浏览器失败,但jQueryselect器($('…'))的结果永远不会为null或未定义。 因此,代码build议是没有意义的。 使用其他答案之一,他们更有意义。


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

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

我认为$('div')。any()的读取比$('div')长长度加上你不会有太多的错误: $('div')。ayn()会给运行时错误, $('div')。lenght将默默地最可能永远是虚假的。

__
2012年11月编辑:

1)由于人们倾向于查看代码,而不是阅读代码中所说的内容,所以我在Wolf的引用代码中添加了两条注意事项。
2)我添加了用于这种情况的小插件的代码。

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

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

另外,你有没有尝试过使用文本函数 – 如果没有元素存在,它什么都不会做。

 $("#btext" + i).text("Branch " + i); 

jquery $()函数总是返回非空值 – 平均元素匹配你select器cretaria。 如果找不到元素,它将返回一个空数组。 所以你的代码看起来像这样 –

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

不pipe你select什么函数, $()总是返回一个jQuery对象,所以不能用来testing。 最好的方法(如果不是唯一的话)是使用size()函数或本地长度属性,如上所述。

 if ( $('selector').size() ) {...} 

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

 // 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. 
 if ( $('#whatever')[0] ) {...} 

所有原生jQuery方法返回的jQuery对象不是一个数组,它是一个具有许多属性的对象; 其中一个是“长度”属性。 你也可以检查size()或get(0)或get() – 'get(0)'与访问第一个元素相同,即$(elem)[0]

使用$("#selector").get(0)像这样检查null。 得到返回的DOM元素,直到那时你重新处理一个数组,在那里你需要检查长度属性。 我个人不喜欢长度检查空处理,它使我困惑:)

使用长度属性,你可以做到这一点。

 jQuery.fn.exists = function(){return ($(this).length < 0);} if ($(selector).exists()) { //do somthing } 

怎么样使用“未定义”?

 if (value != undefined){ // do stuff } 

当对象为空时返回这个错误:
Uncaught TypeError:无法读取null的属性“0”
我试试这个代码
try{ if ($("#btext" + i).length) {};
} catch(err){ if ($("#btext" + i).length) { //working this code if item not NULL }; }

 if (typeof($("#btext" + i)) == 'object'){ $("#btext" + i).text("Branch " + i); } 

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

相反,试试这个:

 if($("#something") !== null){ // do something } 

要么

 if($("#something") === null){ // don't do something }