230 votes

Définir un attribut sans valeur

Comment définir un attribut de données sans ajouter de valeur dans jQuery ? Je veux ceci :

<body data-body>

J'ai essayé :

$('body').attr('data-body'); // this is a getter, not working
$('body').attr('data-body', null); // not adding anything

Tout le reste semble ajouter le deuxième argument sous forme de chaîne. Est-il possible de définir simplement un attribut sans valeur ?

3 votes

Pourquoi avez-vous besoin data-body vs. data-body="" ?

0 votes

Au moins si vous voulez utiliser le XHTML, vous ne devriez pas le faire car minimisation des attributs n'est pas autorisé.

13 votes

Je n'utilise pas le XHTML, mais le HTML5.

278voto

Lix Points 27516

Le site attr() est également une fonction de paramétrage. Vous pouvez simplement lui passer une chaîne vide.

$('body').attr('data-body','');

Une chaîne vide créera simplement l'attribut sans valeur.

<body data-body>

Référence - http://api.jquery.com/attr/#attr-attributeName-value

attr( nom de l'attribut , valeur )

26 votes

+1, mais l'OP sait que c'est un setter. Le fait que passer une chaîne vide fonctionne mais null ne le fait pas est quelque peu surprenant.

2 votes

Javasctipt a des comportements bizarres . Le fait de savoir où ces bizarreries se produisent élimine l'élément de surprise :P

25 votes

Remarque : Cela ne fonctionne pas avec jQuery 1.7.2 (je sais que ce n'est pas la dernière version) mais en utilisant $(el).prop('data-body', true) a fonctionné pour moi où $(el).attr('data-body', '') a fini par mettre data-body="data-body" pour moi.

57voto

Callum McLean Points 639

Essayez peut-être :

var body = document.getElementsByTagName('body')[0];
body.setAttribute("data-body","");

2 votes

Seule cette solution a fonctionné pour moi var btn = $(this).get(0); btn.setAttribute("disabled","");

1 votes

Après avoir joué avec .attr et .prop, comme suggéré dans toutes les autres solutions et commentaires ici, j'ai finalement trouvé que le retour (ou du moins le retour à mi-chemin) au JS natif faisait l'affaire, comme suggéré dans le commentaire ci-dessus... Merci pour cela !

1 votes

body.setAttribute("data-body",""); Cela donnera la valeur "false" à mon attribut. Comment puis-je donner la valeur "" (vide) à un attribut ?

26voto

Charlie H Points 2538

Le site La réponse acceptée n'est pas créer un attribut uniquement nominatif désormais (à partir de septembre 2017).

Vous devez utiliser JQuery prop() pour créer des attributs uniquement nominatifs.

$(body).prop('data-body', true)

16voto

LipESprY Points 101

Vous pouvez le faire sans jQuery !

Exemple :

document.querySelector('button').setAttribute('disabled', '');

<button>My disabled button!</button>

Pour définir la valeur d'un attribut booléen, tel que désactivé, vous pouvez spécifier n'importe quelle valeur. Une chaîne vide ou le nom de l'attribut sont des valeurs recommandées. Tout ce qui compte, c'est que si l'attribut est présent, quelle que soit sa valeur réelle, sa valeur est considérée comme vraie. L'absence de l'attribut signifie que sa valeur est fausse. En attribuant à la valeur de l'attribut disabled la chaîne vide (""), nous attribuons la valeur true à disabled, ce qui a pour effet de désactiver le bouton.

De MDN Element.setAttribute()

9voto

Brent N. Points 81

Je ne sais pas si cela est vraiment bénéfique ou pourquoi je préfère ce style, mais ce que je fais (en vanilla js) l'est :

document.querySelector('#selector').toggleAttribute('data-something');

Cela ajoutera l'attribut en minuscules sans valeur ou le supprimera s'il existe déjà sur l'élément.

https://developer.mozilla.org/en-US/docs/Web/API/Element/toggleAttribute

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