jQuery - 检查元素的存在

时间:2010-02-28 12:44:29

标签: jquery-selectors

好的基本上我需要检查一下,我的菜单#Container是否存在任何第三级元素(h3确切),如果是,则给它们一些属性。如果不将此属性赋予始终存在的第二级元素(h2)。是:

if ($('h3')) {
  //some attribute
} else {
 //some attribute
};

正确的方法?

6 个答案:

答案 0 :(得分:46)

对此使用.length,如果没有匹配则为0 / false:

if ($('h3').length) {
 //some attribute
} else {
 //some attribute
};

简短版,不太可读:

$($('h3').length ? 'h3' : 'h2').addClass("bob");

答案 1 :(得分:3)

.....

if ($('#Container h3').length) {
  //some attribute
} else {
 //some attribute
};

答案 2 :(得分:1)

检查返回的jQuery对象的长度

if ($('h3').length != 0)) {
    $('h3').attr(...);
}
else {
    $('h2').attr(...);
}

答案 3 :(得分:1)

为了使其更具可读性,我提供了这个调整:

var h3ElementsExist = $('h3').length
if (h3ElementsExist) {
  //some attribute
} else {
 //some attribute
};

答案 4 :(得分:1)

我刚刚意识到我发布了这个功能的一个简单方法,为此添加一个jQuery插件很久以前就被删除了。为什么?我不知道。

总之,ele.length很简单,但在考虑基本缺陷时并不是很优雅。它没有维护jQuery样式标记,这可能会损害可读性,并且当它真正“出现”像jQuery应该“自然地”处理的东西时,在“if”语句中强制执行此操作。因此确实如此。如果您正在寻求将“属性”应用于现有元素,则可以简单地进行调用,而不使用if语句。如果元素存在,它将获得新属性。如果它不存在,除了继续之外,它不会伤害任何东西或做任何其他事情。

例如:

$('#Container h3').css('background', 'red');

这将使元素 id'd 中的任何现有H3代码Container具有red背景(如果存在)。如果它们不存在,则基本上将忽略此代码。但是,如果你想做更多,并维护jQuery“ chainability ”以及维护jQuery样式标记,那么我会建议我编写的插件添加 $.exist() 对jQuery。

它允许使用各种方法调用回调参数。简而言之,您可以在if ($('h3').exist() {之类的if语句中使用它,或者您可以创建1到2个回调方法。回调方法纯粹而简单。如果仅提供1,(或仅仅是第一个回调方法),则为“ 存在 ”回调方法。换句话说,如果元素存在,它将触发,然后返回元素,从而维护jQuery“ chainability ”。但是,如果它不存在,则不会发生任何事情,除非提供了第二个回调方法。然后它将触发你的第二个回调方法,就像前面提到的if语句的“ else ”一样。

这里有一些例子:

$('#Container h3').exist(function(boolTrue, elements, indexPerEach) { /* DO WORK */ });

有2个回调

$('#Container h3').exist(function(boolTrue, elements, indexPerEach) { /* DO WORK */ },
function(boolFalse, elements) { /* Elements did NOT EXIST - DO WORK */ });

查看更多示例并获取插件HERE

的缩小版本
/*---PULIGIN---*/
;;(function($){$.exist||($.extend({exist:function(){var a,c,d;if(arguments.length)for(x in arguments)switch(typeof arguments[x]){case "function":"undefined"==typeof c?c=arguments[x]:d=arguments[x];break;case "object":if(arguments[x]instanceof jQuery)a=arguments[x];else{var b=arguments[x];for(y in b)"function"==typeof b[y]&&("undefined"==typeof c?c=b[y]:d=b[y]),"object"==typeof b[y]&&b[y]instanceof jQuery&&(a=b[y]),"string"==typeof b[y]&&(a=$(b[y]))}break;case "string":a=$(arguments[x])}if("function"==typeof c){var e=0<a.length?!0:!1;if(e)return a.each(function(b){c.apply(this,[e,a,b])});if("function"==typeof d)return d.apply(a,[e,a]),a}return 1>=a.length?0<a.length?!0:!1:a.length}}),$.fn.extend({exist:function(){var a=[$(this)];if(arguments.length)for(x in arguments)a.push(arguments[x]);return $.exist.apply($,a)}}))})(jQuery);
/*---PULIGIN---*/

在另一个答案HERE

上查看有关该帖子的更多信息

答案 5 :(得分:0)

检查返回的jQuery对象的大小或长度

if ($('h3').size() != 0)) {
    $('h3').attr(...);
}
else {
    $('h2').attr(...);
}

if ($('h3').length != 0)) {
    $('h3').attr(...);
}
else {
    $('h2').attr(...);
}