如何使用OR条件链接选择器(如果main为空,则替换结果集)

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.

Yah*_*hel 3

这种行为在某些地方称为“合并”。这是一个通用的 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所以,在一个不存在的世界里,如果你存在的adiv

jQuery.coalesce(["#foo", "a", "div"])
Run Code Online (Sandbox Code Playgroud)

jQuery("a")如果#foo不存在则返回,jQuery("#foo")如果#foo存在则返回。

如果您需要在链的中间使用它,您可以使用$("#foo, a, div").coalesce(),但它容易受到选择器本身内的命令的影响。