Dies ist nicht nur eine andere Frage. Was ist der Unterschied? Ich habe einige Tests (http://jsfiddle.net/ZC3Lf/) durchgeführt, bei denen das prop
und attr
von geändert wurde,<form action="/test/"></form>
wobei die Ausgabe wie folgt lautet :
1) Stütze Modifikationstest
Stütze:http://fiddle.jshell.net/test/1
Attr:http://fiddle.jshell.net/test/1
2) Attr Modifikationstest
Prop:http://fiddle.jshell.net/test/1
Attr:/test/1
3) Attr dann Prop Modifikationstest
Prop:http://fiddle.jshell.net/test/11
Attr:http://fiddle.jshell.net/test/11
4) Prop dann Attr Modifikationstest
Prop:http://fiddle.jshell.net/test/11
Attr:http://fiddle.jshell.net/test/11
Jetzt bin ich meines Wissens über ein paar Dinge verwirrt:
Prop: Der Wert in seinem aktuellen Zustand nach Änderungen über JavaScript
Attr: Der Wert, wie er beim Laden der Seite im HTML definiert wurde.
Wenn dies nun richtig ist,
- Warum scheint das Ändern des Attributs
prop
dasaction
vollqualifizierte zu machen , und warum nicht das Ändern des Attributs? - Warum Modifizieren der
prop
in1)
das Attribut ändern, dass man keinen Sinn für mich macht? - Warum Modifizieren der
attr
in2)
der Eigenschaft ändern, sind sie verbunden werden soll auf diese Weise?
Testcode
HTML
JavaScript
var element = $('form');
var property = 'action';
/*You should not need to modify below this line */
var body = $('body');
var original = element.attr(property);
body.append('<h1>Prop Modification test</h1>');
element.prop(property, element.prop(property) + 1);
body.append('Prop: '+element.prop(property)+'<br />');
body.append('Attr: '+element.attr(property)+'<hr />');
//reset
element.prop(property, original);
element.attr(property, original);
body.append('<h1>Attr Modification test</h1>');
element.attr(property, element.attr(property) + 1);
body.append('Prop: '+element.prop(property)+'<br />');
body.append('Attr: '+element.attr(property)+'<hr />');
//reset
element.prop(property, original);
element.attr(property, original);
body.append('<h1>Attr then Prop Modification test</h1>');
element.attr(property, element.attr(property) + 1);
element.prop(property, element.prop(property) + 1);
body.append('Prop: '+element.prop(property)+'<br />');
body.append('Attr: '+element.attr(property)+'<hr />');
//reset
element.prop(property, original);
element.attr(property, original);
body.append('<h1>Prop then Attr Modification test</h1>');
element.prop(property, element.prop(property) + 1);
element.attr(property, element.attr(property) + 1);
body.append('Prop: '+element.prop(property)+'<br />');
body.append('Attr: '+element.attr(property)+'<hr />');
quelle
Antworten:
Leider funktioniert keiner Ihrer Links :(
Einige Einsichten gelten jedoch
attr
für alle Attribute.prop
ist für Eigenschaften.In älteren jQuery-Versionen (<1.6) hatten wir gerade
attr
. Um zu DOM-Eigenschaften wienodeName
, zu gelangenselectedIndex
, musstendefaultValue
Sie Folgendes tun:Das saugte, so
prop
wurde hinzugefügt:Das war großartig, aber ärgerlicherweise war dies nicht abwärtskompatibel, da:
hat kein Attribut von
checked
, aber es hat eine Eigenschaft namenschecked
.Im letzten Build von 1.6 wird
attr
dies auch getan,prop
damit die Dinge nicht kaputt gehen. Einige Leute wollten, dass dies eine saubere Pause ist, aber ich denke, dass die richtige Entscheidung getroffen wurde, da die Dinge nicht überall kaputt gingen!Hinsichtlich:
Dies ist nicht immer der Fall, da das Attribut häufig geändert wird. Für Eigenschaften wie "Aktiviert" muss jedoch kein Attribut geändert werden. Daher müssen Sie prop verwenden.
Verweise:
http://blog.jquery.com/2011/05/03/jquery-16-released/
http://ejohn.org/blog/jquery-16-and-attr
quelle
undefined
und attr () funktioniert gut.Es gibt einen klaren Fall, um Unterschiede zwischen .prop und .attr zu erkennen
Betrachten Sie den folgenden HTML-Code:
und die JS unten mit jQuery:
erstellt die folgende Ausgabe:
quelle
Ich habe es versucht
und es wird wie folgt ausgegeben
Dies kann darauf hinweisen , dass das
action
nur normiert ist , wenn sie liest mitprop
.quelle
2)
normalisiert würde!/test/
wenn der Zugang zuattr
, und legen Sie/test/1
aufattr
, die attr des Elements ist. Es gibt kein Verfahren, das die Normalisierung auslöst.2)
obige Test lautet:element.attr(property, element.attr(property) + 1); body.append('Prop: '+element.prop(property)+'<br />'); body.append('Attr: '+element.attr(property)+'<hr />');
Wenn es beim Lesen normalisiert wurde, würde die letzte Zeile dort nicht die normalisierte Version ausgeben?property = 'action'; body = $('body'); element = $('form');
da jquery 1.6.1+ attr () die Eigenschaft wie vor 1.6 zurückgibt / ändert. Daher sind Ihre Tests nicht sehr sinnvoll.
Beachten Sie geringfügige Änderungen der Rückgabewerte.
z.B
attr ('geprüft'): vor 1.6 ist wahr / falsch wieder da, seit 1.6.1. "Checked" / undefined wird zurückgegeben.
attr ('selected'): Bevor 1.6 true / false zurückgegeben wird, wird 1.6.1 „selected“ / undefined zurückgegeben
Eine ausführliche Übersicht zu diesem Thema auf Deutsch finden Sie hier:
http://mabraham.de/jquery-prop-attr-val-richtig-verwenden/
quelle