Pourquoi la méthode jQuery 1.9+ attr() n'est-elle pas dépréciée?

Can I, A jQuery1.9 + concepteur de logiciels, "déprécier" l'utilisation de la méthode attr() dans mon travail quotidien?


comme le montrent de nombreuses questions,

il y a beaucoup de confusion au sujet de " utiliser attr ou utiliser prop?" , et, par mon point de vue (développeur), pour toutes les utilisations de la méthode attr() , nous pouvons utiliser prop à la place:

  1. rétrocompatibilité : le codage d'un nouveau logiciel pas besoin de cela,
  2. performance : Jean dit "Accéder à des propriétés par le biais de la .la méthode attr() sera légèrement plus lente que l'accès direct.prop ()";
  3. Change attribut value : tout peut être modifié par la méthode prop(name,newvalue) .
  4. Supprimer l'attribut : tout peut être supprimé par le removeProp(name) la méthode.
  5. vérifier les valeurs de l'attribut HTML : utilisation du navigateur DOM, tout le HTML a été converti en DOM, et, si DOM affecté la méthode attr(name) également affecté. À propos de "forte" de la prop: c'est mieux que "html chaîne de valeur" (ex. "checked" vs vrai ).
  6. vérifiez si un attribut a été défini dans le "code HTML original" (en supposant que la méthode attr dans votre le navigateur retourne indéfini si ce n'est pas le cas)... On en a besoin dans un logiciel? formes , ".la méthode val() est la méthode jQuery recommandée pour obtenir ou définir les valeurs de la forme "
  7. cross-browser consistency : les deux (et pas seulement l'attr) sont des méthodes cohérentes. (il est??).

ainsi, à ce moment (2013), Je ne vois pas une bonne raison d'utiliser la méthode attr lorsque développer un nouveau code jQuery... Mais, bien, c'est, en d'autres termes, la question: Il ya une bonne raison d'utiliser la méthode attr dans Mes tâches quotidiennes?

27
demandé sur Community 2013-02-25 19:20:29

4 réponses

.attr() n'est pas déprécié parce que il est utile pour ce qu'il est fait pour , et est la seule façon correcte de faire ce qu'il est fait pour (sauf en utilisant chaque élément getAttribute fonction, qui fait la même chose...ou parsing le HTML vous-même). La seule raison pour laquelle nous avons même cette discussion du tout est parce que jQuery (et certains vieux navigateurs ( toux IE toux ) attributs mal combinés et propriétés, et qui brouillent est ce qu'ils ont apparemment fixé dans 1.9.

.attr() récupère attributs , tandis que .prop() récupère propriétés . Les deux sont des choses différentes, et l'ont toujours été officiellement (bien que le DOM ait souvent une propriété pour correspondre à un attribut). Si vous avez un <p whatever="value"> , où whatever n'est pas un attribut que le navigateur reconnaît, vous utilisez .attr() pour obtenir la valeur de l'attribut. .prop() ne serait même pas en mesure de voir il dans la plupart des navigateurs.

lorsque vous vous souciez du DOM résultant biens , utilisez .prop() . Lorsque vous vous souciez du HTML réel attribut , utilisez .attr() . Ce n'est pas vraiment une chose ou l'autre; vous pouvez utiliser les deux dans le même code et l'univers n'implosera même pas une seule fois (en supposant que vous les avez utilisés correctement, de toute façon). :) Il suffit d'utiliser celui qui est adapté au travail que vous faites à l'époque, et d'arrêter d'essayer de "déprécier" les choses qui ne sont pas cassées.

30
répondu cHao 2013-07-15 21:19:49

j'ai pris la liberté de vous préparer un violon:

http://jsfiddle.net/5REVP /

Spécialement cette partie:

<div id="example" style="padding:10px"></div>

console.log("style");
var styleAttr = $("#example").attr("style");
console.log(styleAttr); // You get "padding:10px"
var styleProp = $("#example").prop("style");
console.log(styleProp); // You get a CSSStyleDeclaration object

L'exemple" style " montre clairement qu'un attribut n'est pas la même chose qu'une propriété (cochez la console).

pour la lisibilité, la maintenabilité et la compatibilité vers l'arrière (ainsi que vers l'avant) vous devez toujours utiliser les méthodes correctes pour un tâche donnée, sinon il ya une chance qu'une méthode peut arrêter de se comporter comme vous le pensez, le .attr() la méthode en est un exemple.

.la méthode attr() est utilisée pour obtenir les attributs des éléments, les attributs sont un SGML terme qui se réfère à l'information contenue dans les étiquettes de l'élément, vous pouvez facilement lire cette information en inspectant les éléments.

  • Si vous obtenez l'attribut "style" d'un élément que vous ne recevra aucune information autre que ce qui est écrit spécifiquement dans cet attribut.
  • si vous obtenez l'attribut" coché "d'une case à cocher, vous obtiendrez" coché "ou"".

.la méthode prop() est utilisée pour obtenir les propriétés DOM des éléments.

  • si vous obtenez la propriété "style" vous n'obtenez pas ce que le concepteur a écrit dans l'attribut style, vous obtenez toutes les propriétés CSS réelles de la élément.
  • si vous obtenez la propriété" cochée " d'une case à cocher, vous obtiendrez vrai ou faux.
12
répondu cernunnos 2013-02-25 15:43:48

.attr () n'accède qu'aux attributs HTML, alors que .prop () récupérera les propriétés qui ne sont pas sur les éléments HTML. Voir la documentation:

par exemple, selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked et defaultSelected doivent être récupérés avec la .prop() la méthode. Avant jQuery 1.6, ces propriétés étaient récupérables avec le .méthode attr (), mais ce n'était pas dans le la portée de l'attribut. Ils n'ont pas attributs correspondants et ne sont propriété.

http://api.jquery.com/prop /

2
répondu Joshua 2013-02-25 15:27:28

mes devoirs... Après avoir lu @cHao et @cernunnos de bonnes explications, et après quelques mois à l'utiliser... Je pense que nous avons besoin d'un autre concept de décider, en tant que programmeur, lorsque l'utilisation ou non d'accessoires et de attr:

  • code source HTML et sa représentation: le navigateur charge une page HTML dans l'espace mémoire du navigateur. Eh bien, ce qui reste au navigateur de la mémoire est la représentation de DOM, mais DOM préserve certaines choses originales, comme attributs et cssText propriété , qui sont "parfois persisté représentations".

    PS: attributs qui ne sont pas définis dans le" DOM standard", n'ont pas de correspondance avec propriétés DOM . Lorsqu'un "attribut (non lu) change, s'il y a une" propriété correspondante (mappée), il peut être modifié automatiquement.

  • DOM state : les pages dynamiques doivent être modifiées directement au DOM, c'est ce que les utilisateurs finaux voient. Ainsi, s'il y a quelques actions "clic et changement" sur la page, chaque fois que le DOM va à une nouvelle représentation de page, donc, chaque fois DOM ont un nouveau état .

    lorsqu'un DOM - biens change, tous les autres DOM biens (si besoin) change constamment.

avec ces concepts à l'esprit, nous pouvons dessiner un " règle de pouce (pour attr vs prop utilisations)":

  1. utilisez prop , vous avez 90% des chances que cela fonctionne... 99% si vous utilisez jQuery pour changer DOM États (et DOM standard hypothèse).
  2. si vous devez changer ou accès aux attributs data-* , utilisez la méthode .data() .
  3. sinon (non DOM, non data, ou choses non standard) vérifiez si un cas d'utilisation .attr() , et réserver un peu de temps pour l'étudier (voir les réponses ci-dessus).
0
répondu Peter Krauss 2013-07-15 13:36:56