Wenn Sie removeProp auf etwas, das Sie removeAttr verwendet haben sollten, wird es im Hintergrund fehlschlagen? Wird es funktionieren? Wird es tatsächlich das gesamte Attribut oder nur den darin enthaltenen Wert entfernen?
Wenn "checked" mit prop () hinzugefügt wurde, kann es mit removeAttr entfernt werden?
Viele Fragen!
Ein Attribut eines Elements ist etwas wie "Klasse". Wohingegen seine Eigenschaft 'className' wäre.
Dies ist der Grund für das Hinzufügen von jQuery.prop und jQuery.propHooks in Version 1.6, um die Arbeit mit beiden zu vereinfachen.
Wenn die Eigenschaft also denselben Namen wie das Attribut hat, können Sie sowohl removeProp als auch removeAttr verwenden.
Ich habe eine ähnliche Frage im jQuery-Forum gestellt und folgende Antwort erhalten:
Ja, Attr ist für HTML-Attribute gedacht wie sie genau definiert sind. prop ist für Eigenschaften. Sagen wir zum Beispiel Du hast einen Knoten elem mit Klasse "etwas" (Rohelement nicht jQuery Objekt). elem.className ist der Eigentum, aber ist wo das Attribut befindet sich. Ändern der Klasse Attribut ändert auch die Eigenschaft automatisch und umgekehrt. Zur Zeit ist Attr verwirrt und verwirrend, weil es versucht hat Job von beiden Funktionen und es gibt viele Bugs deswegen. Das Einführung von jQuery.fn.prop wird mehrere Blocker lösen, Code trennen wie es hätte getrennt werden sollen der Anfang und geben Entwickler schnellere Funktionen zu tun, was sie tun erwarte von ihnen zu tun. Lass mich eine a machen Prozent für eine Sekunde und sage das von meine Erfahrung in der Unterstützung IRC und Lesen des Codes anderer, 95% der Nutzung Fälle für Attr müssen nicht wechseln zu stützen.
BEARBEITEN
Es kann am besten sein, entweder jQuery.attr oder jQuery.prop zu verwenden. Theres scheint ein merkwürdiges Verhalten zu sein, wenn man das geprüfte Attribut unter Verwendung beider setzt und entfernt.
Sehen Sie hier ein Beispiel: Ссылка
Es gibt einen Fehler in 1.6 mit ausgewählten: Ссылка
Der offizielle jQuery-Blog bietet eine sehr klare Erklärung:
In der Version 1.6 haben wir uns getrennt die Handhabung von DOM-Attributen und DOM Eigenschaften in separate Methoden. Das neue .prop () -Methode setzt oder bekommt Eigenschaften für DOM-Elemente und .removeProp () entfernt Eigenschaften. Im Die Vergangenheit, hat jQuery nicht klar gezeichnet Linie zwischen Eigenschaften und Attribute. Im Allgemeinen DOM-Attribute repräsentieren den Status von DOM-Informationen wie aus dem Dokument abgerufen, z als Wertattribut im Markup . DOM Eigenschaften repräsentieren den dynamischen Zustand des Dokuments; zum Beispiel wenn die Benutzer klickt auf das Eingabeelement oben und Typen def die
.prop("value")
ist abcdef aber die.attr("value")
bleibt abc.In den meisten Fällen behandelt der Browser die Attributwert als Startwert für die Eigenschaft, aber Boolean Attribute wie aktiviert oder deaktiviert haben ungewöhnliche Semantik.
Betrachten Sie zum Beispiel das Markup %Code%. Das Vorhandensein des geprüften Attributs bedeutet, dass die Eigenschaft DOM
<input type="checkbox" checked>
ist wahr, obwohl das Attribut hat keinen Wert. Im Code oben ist der geprüfte Attributwert eine leere Zeichenfolge (oder.checked
falls nein Attribut wurde angegeben) aber die Überprüfter Eigenschaftswert istundefined
.Vor jQuery 1.6,
true
gab den booleschen Eigenschaftswert zurück (.attr("checked")
) aber ab jQuery 1.6 gibt es zurück der tatsächliche Wert des Attributs (an leere Zeichenfolge), die sich nicht ändert wenn der Benutzer das Kontrollkästchen anklickt ändere seinen Zustand.Es gibt mehrere Alternativen für Überprüfen des aktuell überprüften Status eines Kontrollkästchens. Das Beste und Meiste performant ist die Verwendung der DOM-Eigenschaft direkt, wie in
true
in einem Event-Handler, wenn dieser auf den Element, das angeklickt wurde. Im Code das verwendet jQuery 1.6 oder neuer, das neue Methodethis.checked
Ruft den gleichen Wert wie auf$(this).prop("checked")
und ist relativ schnell. Endlich der Ausdruckthis.checked
funktioniert für alle Versionen von jQuery.
Mit jQuery 1.6 versuchte ich, einen Menüeintrag zu klonen, der mehrere id
-Attribute hatte, und das tat ich:
$('ul.menu').clone().filter('*').removeProp('id').appendTo('.sidebar');
Als ich die Elemente in Firebug inspizierte, hatte ich eine Menge id="undefined"
- nicht was ich wollte. So, jetzt benutze ich removeAttr
und es scheint viel besser zu funktionieren.
$('ul.menu').clone().filter('*').removeAttr('id').appendTo('.sidebar');
Tags und Links javascript jquery