3 einfache Tips für die Anpassung auf jQuery 1.3
Vor ein paar Monaten erschien der jQuery Realease 1.3. Viele Skripts, die auf den vorherigen Versionen basierten laufen immernoch anständig. Aber hier und da treten doch Probleme beim Upgrade auf. Diese Probleme lassen sich nach Karl Swedberg in 3 Ebenen klassifizieren:
1. Update des “Selector” Attributes
Der wohl am häufigsten auftretende Fehler entsteht durch die redefinition des Selectors auf Attribute. In vorherigen Versionen wurden die Attribute eines Elements mit dem XPath Ausdruck “@Attribute” angesprochen und geändert. Ab 1.3 basiert das Ansprechen auf dem CSS Syntax. Hierzu ein kleines Beispiel:
Früherer Syntax:
1 2 | $('a[@href^=http]'); $('[@title=foo]'); |
Aktuell in jQuery 1.3:
1 2 | $('a[href^=http]'); $('[title=foo]'); |
2. Überprüfung eigener Selektoren
Werden eigene Selektoren benutzt, kommt es hin und wieder zu Fehlern wenn das zweite Argumente des neuen Objektes ein String ist.
1 2 3 | jQuery.extend(jQuery.expr[':'], { hasSiblings: "jQuery(a).siblings(m[3]).length>0" }); |
Das lässt sich einfach durch eine anonyme Javascript Funktion beheben die als return-Wert den String besitzt.
1 2 3 | jQuery.extend(jQuery.expr[':'], { hasSiblings: function(a,i,m) {return jQuery(a).siblings(m[3]).length>0;} }); |
3. Notation von auf “Hidden” oder “Visible” gesetzten Elementen
Wenn man vor der Version 1.3.2, ein Element mit der Eigenschaft “display:block” hatte, dass innerhalb eines anderen Elementes mit “display:none” lag, dann wurde das innere Elemente trotzdem bei Abfrage im Code als sichtbar ausgegeben.
1 2 3 4 5 | <div id="outer1" style="display:none">
<div id="inner1">
Nicht sichtbares div
</div>
</div> |
Vor der Version 1.3.2 hätte der Aufruf $(‘#inner’1).is(‘:visible’) zu return true geführt und $(‘#inner1:hidden’) hätte 0 Elemente zurückgegeben.
Ab 1.3.2 führt $(‘#inner’1).is(‘:visible’) zu dem Wert false und $(‘#inner:hidden’) findet 1 passendes Element.


























