jQuery - 动态设置过滤方法

时间:2012-06-06 14:45:52

标签: jquery variables methods parameters

我想要结合一些代码,但我不确定我想做什么是可能的。基本上我有一个带有一堆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');

我有什么方法可以将过滤方法(prevnextlastfirst)设置为变量,所以我不必重复此操作遍布我的职能部门?我尝试将参数传递给函数并使用变量作为方法:

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

但这不起作用。我明白了:

  

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

我基于如何读取jQuery代码,模糊地理解为什么这不起作用。还有另一种方法吗?

3 个答案:

答案 0 :(得分:1)

这不会短得多,但它肯定更加浓缩:)

for (var i = 0, fns = ['prev', 'next', 'last', 'first'], fn; fn = fns[i]; ++i) {
    $('#selector')[fn]('.class-selector').addClass('current');
}

答案 1 :(得分: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

答案 2 :(得分: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");