lxa*_*lxa 6 javascript jquery jquery-selectors chaining
我现在拥有的:
var result = $('selector1');
if (result.length == 0) result = $('selector2');
Run Code Online (Sandbox Code Playgroud)
但是这会打败链子.
问题是 - 如何使用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
};
Run Code Online (Sandbox Code Playgroud)
#foo所以,在一个不存在的世界里,如果你存在的a话div:
jQuery.coalesce(["#foo", "a", "div"])
Run Code Online (Sandbox Code Playgroud)
jQuery("a")如果#foo不存在则返回,jQuery("#foo")如果#foo存在则返回。
如果您需要在链的中间使用它,您可以使用$("#foo, a, div").coalesce(),但它容易受到选择器本身内的命令的影响。