好的基本上我需要检查一下,我的菜单#Container
是否存在任何第三级元素(h3
确切),如果是,则给它们一些属性。如果不将此属性赋予始终存在的第二级元素(h2
)。是:
if ($('h3')) {
//some attribute
} else {
//some attribute
};
正确的方法?
答案 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(...);
}