题 如何在jQuery中检查null对象


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

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

如何检查元素的存在?


154
2018-01-25 13:08


起源




答案:


检查 jQuery FAQ...

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

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

242
2018-01-25 13:16



你如何看待var _myDiv = $('#myDiv'); ...... .... if(_myDiv.lenght){...}产生异常。 - Nuri YILMAZ
正如eleotlecram所说;更好地避免.length - numediaweb
@AurelianoBuendia,你用过 lenght 代替 length;这是一个拼写错误。 - Sam
@numediaweb,eleotlecram没有说要避免 .length。 - Sam
但..你不会得到一个“无法读取属性'长度'的空”错误? - Sagive SEO


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

 中写道:

调用未定义的长度属性   或null对象将导致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或未定义。因此代码建议毫无意义。使用其他答案之一,它们更有意义。


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

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

我认为 $( '格')。任何() 阅读比...更好 $( '格')。长度加上你不会受到错别字的影响: $( '格')。泉() 会给出运行时错误, $( '格')。lenght 将默默地最有可能永远是假的。

__
编辑2012年11月:

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


51
2018-01-17 11:10



不工作,所以我投票支持你的答案 - Vova Popov
@VovaPopov:我建议你下次再花一点时间阅读答案。我只是说“狼”的代码示例不正确。我从未提供过答案,只是提到了一些更有意义的答案。 - eleotlecram
好答案。对不起,人们误解了它。 - Joe Simmons


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

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

您是否尝试过仅使用文本功能 - 如果不存在任何元素,它将不执行任何操作。

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

13
2018-01-25 13:15



0是假值,因此elem.length表达式的计算结果为false - 换句话说,不需要'!= 0'部分 - James
@ 999,我认为对零的检查使代码更具可读性,尽管这两种方式对于习惯于脚本语言的人来说都是可读的。 - Sam


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

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

12
2018-01-25 13:26



我不认为$()返回数组是真的。 jQuery对象具有与数组类似的行为,但我认为它们实际上并不是数组,我认为你会发现它们的所有行为都不是数组的行为。看到 这个快速演示。 - Sam


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

5
2018-06-08 16:42



这并没有解决这个问题。 - Sam


无论你选择什么功能 $() 总是返回一个jQuery对象,因此无法用于测试。最好的方法(如果不是唯一的话)是使用 size() 功能或原生长度属性,如上所述。

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

5
2017-10-02 06:53





if ( $('#whatever')[0] ) {...}

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


3
2018-01-25 14:02





使用 $("#selector").get(0) 像那样检查null。 get返回dom元素,直到那时你要处理一个数组,你需要检查length属性。我个人不喜欢长度检查空处理,它因某些原因让我困惑:)


1
2018-04-09 20:27



不同的人以不同的方式思考的方式很有趣;我认为检查元素的数量是否为零而不是检查第一个元素是否存在更有意义。 - Sam


使用length属性可以执行此操作。

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

1
2018-05-31 12:26



你的意思是(这个).length> 0? - sage88


用“未定义”怎么样?

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

1
2017-07-27 16:23