4

tl;博士?jsFiddle Demo

我有一个场景,我需要重新发布一个 jquery 选择器,因为 dom 发生了变化。选择器很重要。

$("#protocol :first-child").nextUntil('.sampleDetails','.detailHolder')

为了实现这一点,我尝试将其分解为各个部分并将它们存储起来以供重复使用:

var selector = [];
selector.push("#protocol :first-child");
selector.push("nextUntil"); 
selector.push(['.sampleDetails','.detailHolder']);

这样,当我需要构建可以使用的选择器时

$(selector[0])[selector[1]](selector[2]);

但是,参数 fornextUntil需要两个参数。使用数组不起作用,使用“'.sampleDetails','.detailHolder'”也不起作用。我尝试使用callapply但收到错误提示"Uncaught TypeError: Object [object Array] has no method 'pushStack' "

存储这种选择器链的正确方法是什么?

4

2 回答 2

10

当然,最简单的方法是使用函数,而不是复杂的选择器数组?

var getElements = function() {
    return $("#protocol :first-child").nextUntil('.sampleDetails','.detailHolder');
};

然后,您可以根据需要多次调用它:

var elements = getElements();

甚至:

getElements().show();
于 2013-06-24T20:37:40.520 回答
3

虽然 lonesomeday 的答案是要走的路,但您可以使用原始方法;

jQuery.fn[selector[1]].apply($(selector[0]), selector[2]);

这使用apply()方法,并转换为;

jQuery.fn.nextUntil.apply($('#protocol :first-child'), ['.sampleDetails','.detailHolder']);
于 2013-06-24T20:50:57.577 回答