代码之家  ›  专栏  ›  技术社区  ›  Pim Jager

用插件过滤jquery对象

  •  0
  • Pim Jager  · 技术社区  · 15 年前

    我正在尝试构建一个jquery插件,它过滤提供的jquery对象,只返回一些类似于.filter(expr)函数的元素。这更多是为了教育自己,而不是为了现实世界的问题。但是,我不知道如何从提供的jquery对象中删除元素(或者只返回某些其他元素,这并不重要)。

    代码示例(是的,我知道您可以使用筛选器(“:nth child(n)”)完成此操作,但正如我所说,这是为了自我教育):

    $.fn.notNthElement = function(n){
        var i=0;
        this.each( function(){
            i++;
            if(i==n){
                //remove element from this jQuery object (not from DOM)
                i=0;
            }
            //or alternatively:
            else{
                //push this to some result jQuery object
            }
        });
        return this; //or when going the alternative route, return the result jQuery object
    }
    

    怎么做呢?

    编辑
    我真的在寻找从jquery对象中删除特定元素的方法,而不是解决上述问题的聪明方法。所以我不想返回所提供jquery对象的子集。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Mario Menger    15 年前

    我想你会想用 滤波器(FN) 函数,您可以为jquery对象中的每个项提供一个函数。如果函数返回false,则删除该项。

    例如,这将过滤掉第5项和ID为“蓝色”的项:

    $("div").filter(function (index){
        return !(index == 5 || this.id == "blue");
    });
    

    或者,你可以 implement your own custom selector ,并使用您引用的filter(expr)函数。

        2
  •  0
  •   Svante Svenson    15 年前

    注意:没有尝试过,但认为它有效。把它看作元代码…(尽管它可能会像现在一样工作。)

    $.fn.notNthElement = function(n){
      var $this = $(this);
      return $this.slice(0,n-1).add($this.slice(n));
    };