attr() vs prop() in jQuery 1.6

Die weit verbreitete und beliebte JavaScript Bibliothek jQuery hat in der Version 1.6, die vor wenigen Tagen veröffentlicht wurde, eine weitreichende Veränderung eingeführt: die Unterscheidung zwischen echten Attributen und Properties.

Änderung und deren Konsequenzen

Bei allen älteren Versionen wurde diesbezüglich nicht unterschieden. Es war die Methode attr() für die Abfrage und Veränderung für sowohl Attribute als auch Properties verantwortlich. In jQuery 1.6 wurde die Mehtode prop() eingeführt, die für die Abfrage und Veränderung von Properties zuständig ist, während attr() eigentlich nur noch für echte Attribute zuständig war.

Dass diese Neuregelung klarerweise zu Problemen bei Updates auf die 1.6er Version führen würde, liegt klar auf der Hand. Man müsste jedes Vorkommnis von attr() in seinem Code daraufhin untersuchen, ob man sie durch prop() ersetzen muss - bei größeren Projekten unvorstellbar bzw mit einem riesigen Aufwand verbunden. 

Toleranteres 1.6.1

Alle Entwickler, die begründeterweise Angst vor einem Update auf 1.6 haben, können beruhigt sein: gestern wurde die Version 1.6.1 ins Leben gerufen, die mehr Toleranz und Rückwärtskompatibilität mit sich bringt. Mit anderen Worten: attr() verhält sich ab sofort wieder so wie früher und bleibt die eierlegende Wollmilchsau. Zusätzlich steht die Methode prop() für die Properties zur Verfügung

Trotzdem: richtige Anwendung von attr() und prop() bringt etwas

Die Unterscheidung von Attributen und Properties macht trotzdem Sinn. Nicht zuletzt deshalb, weil es durchaus möglich wäre, dass diese erneute Anpassung von attr() nur vorübergehend sein und in zukünftigen Versionen wieder entfernt werden könnte. Außerdem ist es sauberer und möglicherweise - das ist allerdings nur reine Vermutung - auch performanter.

Ein Attribut ist eine dauerhafte Eigenschaft eines Elements, all das, was man laut HTML-Standard einem Element als Attribut vergeben darf: also zB eine "id" oder "class" oder ein "src" für ein Bild. Properties sind entweder aktive Zustände des Elements, wie zB ob eine Checkbox ausgewählt ist ("checked") oder auch Metainfos wie "tagName" oder "nodeName".

Eine sehr schöne Übersicht darüber, welche Eigenschaften nun über attr() und welche über prop() angesprochen werden sollten, findet man im offiizellen Changelog der jQuery Version 1.6.1.

Neuen Kommentar schreiben