Фильтруйте объект jQuery с помощью плагина - PullRequest
0 голосов
/ 14 мая 2009

Я пытаюсь создать плагин 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
}

Как можно это сделать?

EDIT
Я действительно ищу способ удалить определенные элементы из объекта jQuery, а не какой-то умный способ решить вышеуказанную проблему. Поэтому я не хочу возвращать подмножество предоставленного объекта jQuery.

Ответы [ 2 ]

1 голос
/ 20 мая 2009

Я думаю, вы хотели бы использовать функцию filter (fn) , для которой вы можете предоставить функцию, которая вызывается для каждого элемента в объекте jQuery. Если функция возвращает false, элемент удаляется.

Например, это отфильтровывает 5-й элемент и элемент с идентификатором 'blue':

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

В качестве альтернативы, вы можете реализовать свой собственный селектор и использовать функцию фильтра (expr), на которую вы ссылались.

0 голосов
/ 14 мая 2009

Примечание: не пробовал, но думаю, что это работает. Рассматривайте его как метакод ... (хотя он может работать как есть.)

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