我现在拥有的:
var result = $('selector1');
if (result.length == 0) result = $('selector2');
但这会破坏链接。
问题是 - 如何使用 JQuery 链接获得相同的结果?
我不能使用 $('selector1, selector2')
,因为这总是会为两个选择器选择结果集,而我只需要 selector2
的结果selector1
没有匹配的元素。
最佳答案
这种行为在某些地方被称为“合并”。这是一个通用的 jQuery 插件,可以为您完成此操作(根据反馈进行编辑,请参阅评论)。
// The namespace function
jQuery.coalesce = function(selectors){
var out;
$.each(selectors, function(i, v){
var el = jQuery(v);
if (el.length) {
out = el;
return false;
}
});
return out || jQuery();
};
// The jQuery plugin
jQuery.fn.coalesce = function(){
return jQuery.coalesce(this.selector.split(",")); //a little brittle
};
因此,在一个 #foo
不存在而 a
和 div
存在的世界中,如果您存在:
jQuery.coalesce(["#foo", "a", "div"])
如果 #foo
不存在,则返回 jQuery("a")
,如果 jQuery("#foo")
#foo
确实存在。
如果您需要在链的中间使用它,您可以使用 $("#foo, a, div").coalesce()
,但它容易受到选择器本身内的命令的影响.
关于javascript - 如何使用 OR 条件链接选择器(如果 main 为空,则为替代结果集),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7892666/