131 votes

jQuery : Ajout de deux attributs via la méthode .attr() ;.

EDIT :

J'ai appris qu'utiliser une autre valeur que _blank ne fonctionne pas sur les navigateurs mobiles pour ouvrir de nouvelles fenêtres/onglets.

Par exemple, si vous devez ouvrir une nouvelle fenêtre/un nouvel onglet :

  • Cela fonctionne sur tous les navigateurs, même les navigateurs mobiles : target="_blank" .

  • Cela ne fonctionne pas sur les navigateurs mobiles, mais il fait le travail sur les navigateurs de bureau : target="new" .

--

Bien que je l'aie fait fonctionner, je ne suis pas sûr qu'il y ait une meilleure façon de faire, ou si la façon dont je l'ai fait est la bonne/seule façon.

En gros, ce que je fais, c'est remplacer toutes les target="_new" o target="_blank" les valeurs d'attributs à target="nw" De cette façon, une seule nouvelle fenêtre est ouverte et toutes les autres fenêtres s'ouvrent dans celle-ci, afin de ne pas submerger l'utilisateur avec de multiples fenêtres.

J'ajoute également un " Ouvre une nouvelle fenêtre " title="" attribut.

La solution que j'ai créée est donc celle-ci :

$("a[target='_blank'], a[target='_new']").attr('target','nw').attr('title','Opens in a new window');

Remarquez les deux .attr(); méthodes.

Est-ce la bonne façon d'ajouter deux attributs à un élément ?

J'ai essayé .attr('target','nw','title','Opens in a new window') mais ça n'a pas marché.

La raison de ma question est le principe DYR (Don't Repeat Yourself), donc si je peux améliorer le code que j'ai, tant mieux, sinon, il est ce qu'il est.

Merci.

279voto

Adam Tomat Points 1981

Ça devrait marcher :

.attr({
    target:"nw", 
    title:"Opens in a new window",
    "data-value":"internal link" // attributes which contain dash(-) should be covered in quotes.
});

Note :

" Lorsque vous définissez plusieurs attributs, les guillemets autour des noms d'attributs sont facultatifs.

AVERTISSEMENT : Lorsque vous définissez l'attribut "class", vous devez toujours utiliser des guillemets !

Extrait de la documentation de jQuery (Sep 2016) pour .attr :

Si vous tentez de modifier l'attribut type d'un élément d'entrée ou d'un bouton créé via document.createElement(), une exception sera levée sur Internet Explorer 8 ou plus ancien.

Modifier :
Pour une référence future... A obtenir un seul vous utiliserez l'attribut

var strAttribute = $(".something").attr("title");

A fixer un seul vous utiliserez l'attribut

$(".something").attr("title","Test");

A set multiple les attributs, vous devez tout envelopper dans { ... }

$(".something").attr( { title:"Test", alt:"Test2" } );

Edit - Si vous essayez d'obtenir/de définir l'attribut 'checked' d'une case à cocher...

Vous devrez utiliser prop() à partir de la version 1.6+ de jQuery

la méthode .prop() permet de récupérer explicitement les valeurs des propriétés, tandis que .attr() permet de récupérer les attributs.

...le concept le plus important à retenir concernant l'attribut checked est qu'il ne correspond pas à la propriété checked. L'attribut correspond en fait à la propriété defaultChecked et ne doit être utilisé que pour définir la valeur initiale de la case à cocher. La valeur de l'attribut checked ne change pas avec l'état de la case à cocher, alors que la propriété checked le fait.

Ainsi, pour obtenir l'état vérifié d'une case à cocher, vous devez utiliser :

$('#checkbox1').prop('checked'); // Returns true/false

Ou à définir la case à cocher comme cochée ou non cochée que vous devriez utiliser :

$('#checkbox1').prop('checked', true); // To check it
$('#checkbox1').prop('checked', false); // To uncheck it

30voto

Derek Points 1462

Le bon chemin est :

.attr({target:'nw', title:'Opens in a new window'})

13voto

Tejas Soni Points 356

Si vous souhaitez ajouter des attributs bootstrap dans la balise d'ancrage de manière dynamique, cette méthode vous sera très utile.

 $(".dropdown a").attr({
      class: "dropdown-toggle",
     'data-toggle': "dropdown",
      role: "button",
     'aria-haspopup': "true",
     'aria-expanded': "true"
});

4voto

Jaydeep Patel Points 259

Quelque chose comme ça :

$(myObj).attr({"data-test-1": num1, "data-test-2": num2});

2voto

javaprodigy Points 11

Utilisez des crochets et mettez tous les attributs que vous voulez ajouter à l'intérieur.

Exemple :

$('#objId').attr({
    target: 'nw',
    title: 'Opens in a new window'
});

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