Ce changement est depuis longtemps attendu pour jQuery. Pendant des années, ils se sont contentés d'une fonction appelée attr()
qui était principalement utilisée pour récupérer des propriétés du DOM, et non le résultat auquel on s'attend en fonction du nom. La séparation de attr()
et prop()
devrait aider à dissiper une partie de la confusion entre les attributs HTML et les propriétés du DOM. $.fn.prop()
récupère la propriété spécifiée du DOM, tandis que $.fn.attr()
récupère l'attribut HTML spécifié.
Pour bien comprendre leur fonctionnement, voici une explication détaillée sur la différence entre les attributs HTML et les propriétés du DOM:
Attributs HTML
Syntaxe:
But: Permet au balisage d'avoir des données associées à des événements, au rendu et à d'autres fins.
Visualisation: L'attribut class est montré ici sur le body. Il est accessible à travers le code suivant:
var attr;
attr = document.body.getAttribute("class");
//IE 8 Quirks et au-dessous
attr = document.body.getAttribute("className");
Les attributs sont retournés sous forme de chaîne de caractères et peuvent être différents d'un navigateur à l'autre. Cependant, ils peuvent être vitaux dans certaines situations. Comme illustré ci-dessus, le mode IE 8 Quirks (et inférieur) s'attend au nom d'une propriété du DOM dans get/set/removeAttribute au lieu du nom de l'attribut. C'est l'une des nombreuses raisons pour lesquelles il est important de connaître la différence.
Propriétés du DOM
Syntaxe:
document.body.onload = foo;
But: Donne accès aux propriétés appartenant aux nœuds d'éléments. Ces propriétés sont similaires aux attributs, mais ne sont accessibles qu'à travers JavaScript. C'est une différence importante qui aide à clarifier le rôle des propriétés du DOM. Veuillez noter que les attributs sont totalement différents des propriétés, car cet assignement de gestionnaire d'événement est inutile et ne recevra pas l'événement (le body n'a pas d'événement onload, seulement un attribut onload).
Visualisation:
Ici, vous remarquerez une liste de propriétés sous l'onglet "DOM" dans Firebug. Ce sont des propriétés du DOM. Vous remarquerez immédiatement plusieurs d'entre elles, car vous les avez utilisées auparavant sans le savoir. Leurs valeurs sont ce que vous recevrez via JavaScript.
Documentation
Exemple
HTML:
JavaScript: alert($('#test').attr('value'));
Dans les versions antérieures de jQuery, cela renvoie une chaîne vide. Dans la version 1.6, elle renvoie la valeur correcte, foo
.
Sans avoir regardé le nouveau code pour l'une ou l'autre fonction, je peux affirmer avec confiance que la confusion a davantage à voir avec la différence entre les attributs HTML et les propriétés du DOM, plutôt qu'avec le code lui-même. Espérons que cela vous a éclairci certaines choses.
-Matt
17 votes
Cela sera d'un intérêt certain : books.google.ca/…
29 votes
@Neal, c'est parce que ce changement va au-delà de jQuery. La différence entre les attributs HTML et les propriétés du DOM est énorme.
0 votes
@Matt mais qu'est-ce que
attr
retournait avant 1.6? est-ce que cela retournait toujours une chaîne de caractères?0 votes
.attr() a radicalement changé dans jQuery 1.6. Ici, le problème est expliqué: edgarinvillegas.wordpress.com/2011/05/10/…
0 votes
@Edgar, beaucoup des problèmes ont été fixés dans jQuery 1.6.1
7 votes
Cela me rend triste de voir que jQuery a annulé les changements. Ils vont dans la mauvaise direction.
4 votes
@Neal. Oui, et cela ne fait que compliquer davantage le problème au lieu de séparer les deux méthodes.
0 votes
L'attribut obsolète dans 1.9.0+ a été supprimé.
2 votes
Selon mes informations, à partir de la version 1.9,
attr()
ne fera plus de "magie" pour les propriétés. Ainsi,.attr('checked', false)
ne fera pas ce à quoi on pourrait s'attendre.0 votes
@Neal - l'accès aux propriétés via attr() a été supprimé pour certaines choses à partir de jQuery 1.9.0 jquery.com/upgrade-guide/1.9 descendez et lisez .attr() versus .prop() les attributs booléens tels que checked et disabled sur une case à cocher sont affectés par ce changement
0 votes
Voir ce fiddle jsfiddle.net/h682v/4, le changer en version 1.9.1, et voir que les propriétés pour disabled ne sont pas modifiées en utilisant attr - vérifier/décocher ces deux en bas sont toujours accessibles jusqu'à ce que vous changiez le
attr()
truc enprop()
- une instance du changement.1 votes
Votre connaissance collective de jQuery est impressionnante. Cependant, lorsque quelqu'un dit x vs y, il ne cherche qu'une simple comparaison, quand utiliser l'un et pas l'autre. Il ne veut pas une analyse approfondie. C'est pour cela qu'il est ici et ne lit pas la documentation. Toutes les réponses terribles
6 votes
@BritishDeveloper la réponse est plus compliquée que de simplement dire toujours utiliser x ou y car cela dépend de ce que vous avez l'intention d'obtenir. Voulez-vous l'attribut, ou voulez-vous la propriété ? Ce sont deux choses très différentes.
0 votes
Voir aussi Propriétés et attributs en HTML
0 votes
@Neal Je ne sais pas, il ne se concentre pas autant sur jQuery que cette question ici, donc il pourrait souvent être une meilleure cible de doublon.
0 votes
@Bergi les réponses ici ne font même pas référence à jQuery et sont essentiellement le point de référence canonique pour les propriétés don vs les attributs
0 votes
Vous n'avez plus besoin de
$(el).prop(...)
. Voir: youmightnotneedjquery.com/#get_outer_html