/ / jQuery - dynamisch gesetzte Filtermethode - Jquery, Variablen, Methoden, Parameter

jQuery - Filtermethode dynamisch festlegen - jquery, Variablen, Methoden, Parameter

Ich möchte Code kombinieren, bin mir aber nicht sicherwenn das, was ich machen möchte, möglich ist. Grundsätzlich habe ich eine Funktion mit einer Reihe von if / else-Anweisungen, und es gibt eine Zeile, die in allen verschiedenen Fällen ähnlich ist:

$("#selector).prev(".class-selector").addClass("current");
$("#selector).next(".class-selector").addClass("current");
$("#selector).last(".class-selector").addClass("current");
$("#selector).first(".class-selector").addClass("current");

Gibt es Möglichkeiten, die Filtermethode festzulegen (prev, next, last, first) als Variable, damit ich diese Zeile nicht in meiner gesamten Funktion wiederholen muss? Ich habe versucht, einen Parameter an die Funktion zu übergeben und eine Variable als Methode zu verwenden:

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

aber das funktioniert nicht. Ich bekomme:

Objekt hat keine Methode "Variable" "Fehler.

Ich verstehe vage, warum dies nicht funktioniert, basierend auf dem Lesen von jQuery-Code. Gibt es eine andere Möglichkeit, dies zu tun?

Antworten:

1 für die Antwort № 1

Das ist nicht viel kürzer, aber es ist definitiv mehr komprimiert :)

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

0 für die Antwort № 2
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

0 für die Antwort № 3

Sie könnten es als Jquery-Plugin versuchen ...

(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");