jQuery的.add在空集上?

时间:2016-03-11 12:10:06

标签: javascript jquery jquery-selectors

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

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

// result is `$([])`

请注意,我不想要一个数组,但是我在上面的例子中发布了一个jQuery选择器。

2 个答案:

答案 0 :(得分:0)

在昏迷中使用数组连接:

var elements = [];

elements.push('#one');

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

https://jsfiddle.net/8xx8x1xe/

答案 1 :(得分:0)

您可以先找出您需要的元素/选择器 然后使用这些来初始化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());
}