Javascript 如何在jQuery中检查空对象

Javascript 如何在jQuery中检查空对象,javascript,jquery,dom,object,null,Javascript,Jquery,Dom,Object,Null,我正在使用jQuery,我想检查页面中是否存在元素。我已经编写了以下代码,但不起作用: if($("#btext" + i) != null) { //alert($("#btext" + i).text()); $("#btext" + i).text("Branch " + i); } 如何检查元素是否存在?查找函数返回匹配元素的数组。您可以检查长度是否为零。请注意只查找元素一次并根据需要重用结果的更改 var elem = $("#btext" + i); if (ele

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

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

如何检查元素是否存在?

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

var elem = $("#btext" + i);
if (elem.length != 0) {
   elem.text("Branch " + i);
}
另外,您是否尝试过只使用text函数——如果不存在任何元素,它将不会起任何作用

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

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

if ( $('#myDiv').length ){}
jquery$()函数始终返回非空值-与选择器cretaria匹配的平均元素。如果找不到元素,它将返回一个空数组。 所以你的代码看起来像这样-

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

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

无论选择什么,函数始终返回一个jQuery对象,因此无法用于测试。最好的方法(如果不是唯一的)是使用
size()
函数或上文解释的本机长度属性

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

在未定义或空对象上调用length属性将导致IE和webkit浏览器失败

相反,请尝试以下方法:

if($("#something") !== null){
  // do something
}
 // 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属性 或者空对象将导致IE和 webkit浏览器将失败

相反,请尝试以下方法:

if($("#something") !== null){
  // do something
}
 // 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
}
虽然对未定义或null对象调用length属性确实会导致浏览器失败,但jQuery的选择器($(“…”)的结果永远不会为null或未定义。因此,代码建议毫无意义。使用其他答案中的一个,它们更有意义


(2012年更新)因为人们关注代码,而这个答案在列表中占据很高的位置:在过去的几年里,我一直在使用这个小插件:

  jQuery.fn['any'] = function() {
     return (this.length > 0);
  };
我认为$('div')。any()读起来比$('div')好。length,而且你不会受到太多打字错误的困扰:$('div')。ayn()会出现运行时错误,$('div')。lengh很可能永远都是错误的

__
2012年11月编辑:

1) 因为人们倾向于看代码,而不是阅读代码周围的内容,所以我在引用的Wolf代码中添加了两个大的警告注释。

2) 我添加了用于这种情况的小插件的代码。

使用
$(“#选择器”)。获取(0)
以类似的方式检查null。get返回dom元素,直到处理数组时,才需要检查length属性。我个人不喜欢空处理的长度检查,这让我感到困惑:)

在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.

使用“长度”属性可以执行此操作

jQuery.fn.exists = function(){return ($(this).length < 0);}
if ($(selector).exists()) { 
   //do somthing
}
jQuery.fn.exists=function(){return($(this).length<0);}
如果($(选择器).exists()){
//干坏事
}

当对象为空时,返回此错误:

Uncaught TypeError: Cannot read property '0' of null
我尝试以下代码:

try{
  if ($("#btext" + i).length) {};               
}catch(err){
  if ($("#btext" + i).length) {
     //working this code if the item, not NULL 
   }
}
使用“未定义”怎么样


0是假值,因此elem.length表达式的计算结果为假-换句话说,不需要“!=0' part@999,我认为对零的检查使代码更具可读性,尽管这两种方法对于习惯于脚本语言的人来说可能都是可读的。。。。如eleotlecram所说,如果(_myDiv.lenght){…}产生exception;最好避免。length@AurelianoBuendia,您使用了
length
而不是
length
;这是一个拼写错误。@numediaweb,eleotlecram没有说要避免
.length
,但是。。您不会得到一个“无法读取null的属性'length'的”错误吗?我不认为$()返回数组是真的。jQuery对象具有类似于数组的行为,但我认为它们实际上不是数组,我认为您会发现它们的行为并非都与数组的行为相同。看,不同的人思考不同的方式很有趣;我认为检查元素数是否为零比检查第一个元素是否存在更有意义。这并不能解决这个问题。@Vovapov:我建议下次你花多一点时间阅读答案。我只是说代码示例“by Wolf”是不正确的。我从来没有提供答案,只是参考了一些更有意义的其他答案。答案不错。很抱歉人们误解了它。你的意思是(这个).length>0吗?如果($(“#某物”).length!=0{}
if (value != undefined){ // do stuff }