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 № 1Das 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");