Javascript 在jQuery中查找回退元素
JavaScript对于回退和默认设置有非常好的语法,只要不成功的调用返回falsy值:Javascript 在jQuery中查找回退元素,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,JavaScript对于回退和默认设置有非常好的语法,只要不成功的调用返回falsy值: var element = findElement() || findSomeOtherElement() || makeALastAttempt(); 然而,jQuery选择器即使是空的,也是真实的。 如果说“我希望元素在此选择器处,如果它不存在,则元素在此选择器处”,是否有一种优雅的方式?否。对不起,您必须使用.length属性。这是Javascript将所有对象评估为truthy的副作用,显然jQu
var element = findElement() || findSomeOtherElement() || makeALastAttempt();
然而,jQuery选择器即使是空的,也是真实的。如果说“我希望元素在此选择器处,如果它不存在,则元素在此选择器处”,是否有一种优雅的方式?否。对不起,您必须使用
.length
属性。这是Javascript将所有对象评估为truthy的副作用,显然jQuery选择器在功能上是一个对象。但是,生成的语法并不是那么糟糕:
$(function(){
var element = $('.findElement'),
otherElement = $('.findSomeOtherElement'),
lastAttempt = $('.lastAttempt');
var elegance = (element.length && element)
|| (otherElement.length && otherElement)
|| (lastAttempt.length && lastAttempt);
elegance.css('border','1px solid green');
});
为什么不使用:
jQuery.fn.exists = function(){
if(this.length>0)
return this;
return false; };
var a = ($(selector1).exists() || $(selector2).exists());
如果只需要一个元素,则可以执行以下操作:
var element = $(findElement()[0] || findSomeOtherElement()[0] || makeALastAttempt()[0]);
这里有一个更接近实际需要的答案
var fallback = function(options){
var numOfOptions = options.length;
if (numOfOptions == 2){
return (options[0].length > 0)? options[0] : options[1];
}else if (numOfOptions > 2){
return fallback(options.slice(1));
}else if (numOfOptions == 1){
return options[0];
}else{
return $();
}
};
fallback([$(selector1),$(selector2),$(selector3)]);
将选择一个名为
anchorName
的元素,如果找不到,则选择另一个ID为#anchorName
$("[name=anchorName], #anchorName").first()
如果您只想要一个元素作为结果,那么我最终得到:
$('#preferred-element').add($('#fallback-element')).first();
这个
不是已经是jQuery对象了吗jQuery.fn.exists=function(){返回this.length>0?this:false;}
这应该是可行的,但是让一个exists()
函数像getter一样运行似乎是一个代码,我将使用$.fn.orElse=function{return This.length?This:$(s)}
。但是我希望有一种不扩展jQuery的好方法来实现这一点(即,即使第一个选择器与某个匹配,也会执行所有三个every选择器)@arnaud:True,但如果您愿意,您可以始终内联整个选择器。我只是预先计算了选择器的可读性。这是一个聪明的解决方案,但即使预先计算也很难阅读。值得指出的可能重复:当两者都存在并且首先在DOM中遇到#anchorName
时,这将选择#anchorName