2

我正在寻找组合一些代码,但我不确定我想做的事情是否可行。基本上我有一个带有一堆 if/else 语句的函数,并且在所有不同的情况下都有一行相似:

$('#selector).prev('.class-selector').addClass('current');
$('#selector).next('.class-selector').addClass('current');
$('#selector).last('.class-selector').addClass('current');
$('#selector).first('.class-selector').addClass('current');

有什么方法可以将过滤方法(prev, next, last, first)设置为变量,这样我就不必在我的函数中重复这一行?我尝试将参数传递给函数并使用变量作为方法:

$('#selector).variable('.class-selector').addClass('current');

但这不起作用。我得到:

对象没有方法'变量'”错误。

根据 jQuery 代码的读取方式,我隐约明白为什么这不起作用。还有另一种方法可以做到这一点吗?

4

3 回答 3

1

这并不短,但肯定更浓缩:)

for (var i = 0, fns = ['prev', 'next', 'last', 'first'], fn; fn = fns[i]; ++i) {
    $('#selector')[fn]('.class-selector').addClass('current');
}
于 2012-06-06T14:51:21.280 回答
0
var $all = $('#selector .class-selector')
$all.eq(0).addClass('current'); //first
$all.eq(4).addClass('current'); //fifth
$all.eq($all.length-1).addClass('current'); //last
于 2012-06-06T14:49:51.060 回答
0

您可以尝试将其作为 jquery 插件...

(function( $ ){
    $.fn.pnlf = function(class_selector, current) {
        this.prev(class_selector).addClass(current);
        this.next(class_selector).addClass(current);
        this.last(class_selector).addClass(current);
        this.first(class_selector).addClass(current);

        return this;
    };
})( jQuery );

// Use the plugin on the selected element...
$("#selector").pnlf("class-selector", "current");
于 2012-06-06T15:36:29.433 回答