175

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

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

如何检查元素的存在?

4

13 回答 13

257

检查jQuery 常见问题...

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

if ( $('#myDiv').length ){}
于 2009-01-25T13:16:35.843 回答
64

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

写道:

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

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


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

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

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

__
2012 年 11 月编辑:

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

于 2011-01-17T11:10:09.717 回答
16

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

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

另外,您是否尝试过仅使用 text 函数——如果不存在任何元素,它将什么也不做。

$("#btext" + i).text("Branch " + i);
于 2009-01-25T13:15:49.137 回答
12

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

if ($("#btext" + i).length){
        //alert($("#btext" + i).text());
    $("#btext" + i).text("Branch " + i);
}
于 2009-01-25T13:26:19.353 回答
5

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

if ( $('selector').size() ) {...}                   
于 2010-10-02T06:53:03.633 回答
5

在 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.
于 2011-06-08T16:42:56.727 回答
5

使用“未定义”怎么样?

if (value != undefined){ // do stuff } 
于 2016-07-27T16:23:44.270 回答
3
if ( $('#whatever')[0] ) {...}

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

于 2009-01-25T14:02:40.357 回答
1

像这样使用$("#selector").get(0)null 检查。get 返回 dom 元素,直到那时您正在处理一个数组,您需要在其中检查长度属性。我个人不喜欢对 null 处理进行长度检查,出于某种原因它让我感到困惑 :)

于 2011-04-09T20:27:52.993 回答
1

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

jQuery.fn.exists = function(){return ($(this).length < 0);}
if ($(selector).exists()) { 
   //do somthing
}
于 2012-05-31T12:26:52.413 回答
0

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

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 
   }
}
于 2016-02-23T07:54:08.237 回答
-4
if (typeof($("#btext" + i)) == 'object'){
    $("#btext" + i).text("Branch " + i);
}
于 2009-12-26T13:21:15.390 回答
-7

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

而是试试这个:

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

或者

if($("#something") === null){
  // don't do something
}
于 2010-12-17T02:15:29.600 回答