【问题标题】:jQuery - dynamically set filter methodjQuery - 动态设置过滤方法
【发布时间】:2012-06-10 14:37:33
【问题描述】:

我正在寻找组合一些代码,但我不确定我想要做的事情是否可行。基本上我有一个带有一堆 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 代码的读取方式,我隐约明白为什么这不起作用。还有其他方法吗?

【问题讨论】:

    标签: jquery variables methods parameters


    【解决方案1】:
    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】:

      这不是很短,但肯定更简洁:)

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

      【讨论】:

      • 谢谢!这正好符合我正在寻找的内容,并且我能够从这里弄清楚。这基本上就是我需要的 [fn] 语法。
      【解决方案3】:

      您可以将其作为 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");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-15
        • 1970-01-01
        • 1970-01-01
        • 2015-03-13
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多