2489 votes

.prop() vs .attr()

Alors jQuery 1.6 a la nouvelle fonction prop().

$(selector).click(function(){
    //au lieu de:
    this.getAttribute('style');
    //dois-je utiliser:
    $(this).prop('style');
    //ou:
    $(this).attr('style');
})

ou dans ce cas, est-ce qu'ils font la même chose?

Et si je dois passer à utiliser prop(), est-ce que tous les anciens appels à attr() vont casser si je passe à la version 1.6?

MISE À JOUR

selector = '#id'

$(selector).click(function() {
    //au lieu de:
    var getAtt = this.getAttribute('style');
    //dois-je utiliser:
    var thisProp = $(this).prop('style');
    //ou:
    var thisAttr = $(this).attr('style');

    console.log(getAtt, thisProp, thisAttr);
});

test

(voir aussi ce fiddle: http://jsfiddle.net/maniator/JpUF2/)

La console enregistre le getAttribute comme une chaîne, et le attr comme une chaîne, mais le prop comme une CSSStyleDeclaration, Pourquoi? Et comment cela affecte-t-il mon codage à l'avenir?

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?

14voto

naor Points 181

Généralement, vous voudrez utiliser des propriétés. Utilisez les attributs uniquement pour :

  1. Obtenir un attribut HTML personnalisé (car il n'est pas synchronisé avec une propriété DOM).
  2. Obtenir un attribut HTML qui ne se synchronise pas avec une propriété DOM, par exemple obtenir la "valeur d'origine" d'un attribut HTML standard, comme .

9voto

NkS Points 1168

attributs -> HTML

propriétés -> DOM

10 votes

Je sais ce que vous voulez dire, mais HTML est un langage de balisage, et le DOM est une représentation créée à partir du HTML. Un DOMElement a à la fois des attributs et des propriétés.

0 votes

@t.niese, attirbuts est également l'une des propriétés de DOM

0 votes

La réponse courte est simple.

7voto

Gothburz Points 2286

Avant jQuery 1.6, la méthode attr() parfois tenait compte des valeurs de propriété lors de la récupération des attributs, ce qui provoquait un comportement plutôt incohérent.

L'introduction de la méthode prop() fournit un moyen de récupérer explicitement les valeurs de propriété, tandis que .attr() récupère les attributs.

La documentation :

jQuery.attr() Obtenez la valeur d'un attribut pour le premier élément de l'ensemble d'éléments appariés.

jQuery.prop() Obtenez la valeur d'une propriété pour le premier élément de l'ensemble d'éléments appariés.

6voto

BobStein-VisiBone Points 398

Une chose que .attr() peut faire et que .prop() ne peut pas : affecter les sélecteurs CSS

Voici un problème que je n'ai pas vu dans les autres réponses.

Sélecteur CSS [nom=valeur]

  • répondra à .attr('nom', 'valeur')
  • mais pas toujours à .prop('nom', 'valeur')

.prop() n'affecte que quelques sélecteurs d'attributs

.attr() affecte tous les sélecteurs d'attributs

0 votes

Enfin, quelqu'un parle de définir des attributs et leurs valeurs avec attr et prop. Tout le monde parle de l'utilisation de get de ces deux méthodes et je ne trouve pas ce que je cherche. Merci d'avoir ajouté cela.

3voto

user2657778 Points 105

Rappel doux concernant l'utilisation de prop(), exemple :

if ($("#checkbox1").prop('checked')) {
    isDelete = 1;
} else {
    isDelete = 0;
}

La fonction ci-dessus est utilisée pour vérifier si la case à cocher 1 est cochée ou non, si elle est cochée : retourne 1; si non : retourne 0. La fonction prop() est utilisée ici comme une fonction GET.

if ($("#checkbox1").prop('checked', true)) {
    isDelete = 1;
} else {
    isDelete = 0;
}

La fonction ci-dessus est utilisée pour cocher la case 1 et retourner TOUJOURS 1. Maintenant la fonction prop() est utilisée comme une fonction SET.

Ne fais pas d'erreur.

N/B : Lorsque je vérifie la propriété src de l'image. Si le src est vide, prop renvoie l'URL actuelle de la page (incorrect), et attr renvoie une chaîne vide (correct).

0 votes

Tu as tort dans cet exemple : ![Smiley face](smiley.gif). Cela devrait fonctionner et renvoyer l'emplacement de l'image.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X