jQuery 的 .add 在一个空集上?

jQuery's .add on an empty set?

我正在开发一个有很多选项的插件,因此我试图跟踪一组元素并将它们放在一个变量中。该变量不能为空(但这与此处无关)。假设只有两个选项,那么变量将保存一个或两个元素作为 jQuery 对象,即 $("#el1, #el2")。我尝试了以下,但添加的结果仍然是 $([]).

var track = $([]);
someFunc() {
    if (option1) track.add("#el1");
    if (option2) track.add("#el2");
}

// result is `$([])`

请注意,我不想要数组,而是我在上面示例中发布的 jQuery 选择器。

在昏迷时使用数组连接:

var elements = [];

elements.push('#one');

console.log(elements.join(','));
$(elements.join(','));

https://jsfiddle.net/8xx8x1xe/

你可以先弄清楚你需要哪个elements/selectors。
然后使用这些来初始化 track 变量和一个 jQuery 对象传递所有相关的选择器。

var track = someFunc();

// you would have to check the length of `track` first as it may be only an empty array (length == 0) and no real jQuery object
if (track.length) {
    //...
}

// returns a jQuery object with all the matched elements
// or an empty array if there is no relevant selector
function someFunc() {
    // place to store the selectors
    var selectors = [];

    // store the relevant selectors in <selectors>
    if (option1) selectors.push("#el1");
    if (option2) selectors.push("#el2");

    // if there is at least one selector in <selectors>
    if (selectors.length > 0) {
        // create a jQuery object of them and return it
        return $(selectors.join())
    } else {
        // otherwise we return an empty array
        // this allows us to use .length in both cases
        return [];
    }

    // or always return a jQuery object
    // return $(selectors.join());
}