How to check null objects in jQuery
我正在使用jQuery,我想检查页面中是否存在元素。 我写了下面的代码,但它不起作用:
1 2 3 4 | if($("#btext" + i) != null) { //alert($("#btext" + i).text()); $("#btext" + i).text("Branch" + i); } |
如何检查元素的存在?
查看jQuery FAQ ...
您可以使用选择器返回的jQuery集合的length属性:
1 | if ( $('#myDiv').length ){} |
(因为我似乎没有足够的声誉来拒绝答案......)
沃尔夫写道:
Calling length property on undefined
or a null object will cause IE and
webkit browsers to fail!Instead try this:
1
2
3
4 // NOTE!! THE FOLLOWING IS WRONG; DO NOT USE! -- EleotleCram
if($("#something") !== null){
// do something
}or
1
2
3
4 // NOTE!! THE FOLLOWING IS WRONG; DO NOT USE! -- EleotleCram
if($("#something") === null){
// don't do something
}
虽然在undefined或null对象上调用length属性确实会导致浏览器失败,但jQuery选择器($('...'))的结果永远不会为null或未定义。因此代码建议毫无意义。使用其他答案之一,他们更有意义。
(2012年更新)因为人们看代码并且这个答案在列表中相当高:在过去的几年里,我一直在使用这个小插件:
1 2 3 | jQuery.fn['any'] = function() { return (this.length > 0); }; |
我认为$('div')。any()读取比$('div')更好。长度,加上你不会受到错别字的影响:$('div')。ayn()会给出运行时错误,$('div')。lenght将很可能永远是假的。
__
编辑2012年11月:
1)因为人们倾向于查看代码而不是阅读代码周围的内容,所以我在引用的Wolf代码中添加了两个重要的警告。
2)我添加了我用于这种情况的小插件的代码。
lookup函数返回匹配元素的数组。你可以检查长度是否为零。请注意,更改仅查找元素一次,并根据需要重用结果。
1 2 3 4 | var elem = $("#btext" + i); if (elem.length != 0) { elem.text("Branch" + i); } |
此外,您是否尝试过使用文本功能 - 如果不存在任何元素,它将不执行任何操作。
1 | $("#btext" + i).text("Branch" + i); |
jquery $()函数总是返回非null值 - 与您选择器cretaria匹配的mean元素。如果未找到该元素,则返回一个空数组。
所以你的代码看起来像这样 -
1 2 3 4 | if ($("#btext" + i).length){ //alert($("#btext" + i).text()); $("#btext" + i).text("Branch" + i); } |
在jQuery 1.4中你得到了$ .isEmptyObject函数,但是如果你被迫使用像我们这样的旧版jQ,那么糟糕的Drupal开发人员就会窃取使用这段代码:
1 2 3 4 5 6 7 | // This is a function similar to the jQuery 1.4 $.isEmptyObject. function isObjectEmpty(obj) { for ( var name in obj ) { return false; } return true; } |
使用它像:
1 | console.log(isObjectEmpty(the_object)); // Returns true or false. |
无论您选择什么,函数
1 | if ( $('selector').size() ) {...} |
用"未定义"怎么样?
1 | if (value != undefined){ // do stuff } |
1 | if ( $('#whatever')[0] ) {...} |
所有本机jQuery方法返回的jQuery对象都不是数组,它是一个具有许多属性的对象;其中一个是"长度"财产。您还可以检查size()或get(0)或get() - 'get(0)'与访问第一个元素的工作方式相同,即$(elem)[0]
使用length属性可以执行此操作。
1 2 3 4 | jQuery.fn.exists = function(){return ($(this).length < 0);} if ($(selector).exists()) { //do somthing } |
使用
当对象为空时返回此错误:
未捕获TypeError:无法读取null的属性'0'我试试这个代码
if ($("#btext" + i).length) {};
}
catch(err){
if ($("#btext" + i).length) {
//working this code if item not NULL
};
}
1 2 3 | if (typeof($("#btext" + i)) == 'object'){ $("#btext" + i).text("Branch" + i); } |
在undefined或null对象上调用length属性将导致IE和webkit浏览器失败!
而是试试这个:
1 2 3 | if($("#something") !== null){ // do something } |
要么
1 2 3 | if($("#something") === null){ // don't do something } |