2009-05-14 11 views
0

Ich versuche ein jQuery-Plugin zu erstellen, das das angegebene jQuery-Objekt filtert, um nur einige Elemente zurückzugeben, die der .filter (expr) -Funktion ähneln. Das ist mehr für mich selbst als für ein Problem der realen Welt. Allerdings kann ich nicht herausfinden, wie Elemente aus dem bereitgestellten jQuery-Objekt entfernt werden (oder nur bestimmte andere zurückgeben, ist nicht wirklich wichtig).Das jQuery-Objekt mit einem Plugin filtern

Codebeispiel (Ja ich weiß, Sie dies mit Filter tun können (‚: Nth-Kind (n)‘), aber wie ich sagte, dies für die Ausbildung selbst ist):

$.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 
} 

Wie man dies tun würde, ?

EDIT
ich wirklich nach einer Möglichkeit, bestimmte Elemente aus dem jQuery-Objekt zu entfernen, nicht einige clevere Weg, um das oben beschriebene Problem zu lösen. Daher möchte ich eine Teilmenge des bereitgestellten jQuery-Objekts zurückgeben.

Antwort

1

Ich denke, Sie Filter verwenden möchte (fn) Funktion, auf die Sie eine Funktion liefern kann, dass wird für jedes Element im jQuery-Objekt aufgerufen. Wenn die Funktion false zurückgibt, wird das Element entfernt.

Zum Beispiel würde dies filtert das fünfte Element und das Element mit id ‚blau‘:

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

Alternativ könnten Sie implement your own custom selector, und verwenden Sie die Filter (expr) -Funktion, die Sie genannt.

+0

Thnx, ich habe nie bemerkt, dass die Filtermethode eine Funktion als Argument genommen hat. –

0

Hinweis: Habe das nicht versucht, aber denke, es funktioniert. Sehen Sie es als Meta-Code ... (obwohl es nur funktionieren könnte wie.)

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