Imposta attributo senza valore


194

Come posso impostare un attributo di dati senza aggiungere un valore in jQuery? Voglio questo:

<body data-body>

Provai:

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

Tutto il resto sembra aggiungere il secondo argomento come stringa. È possibile impostare un attributo senza valore?


3
Perché avete bisogno data-bodyvs data-body=""?
Pillole di esplosione il

Almeno se vuoi usare XHTML, non dovresti farlo poiché la minimizzazione degli attributi non è consentita.
Matthias,

9
Non uso XHTML, utilizzo HTML5
David Hellsing,

2
@ user1689607 perché sto salvando l'HTML generato come stringa e in seguito dovrò fare una ricerca inversa.
David Hellsing,

4
@ExplosionPills Un esempio è l' requiredattributo per la convalida del modulo HTML5. Sono sicuro che ci sono molti altri casi d'uso validi.
Zero3,

Risposte:


252

La attr()funzione è anche una funzione setter. Puoi semplicemente passargli una stringa vuota.

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

Una stringa vuota creerà semplicemente l'attributo senza valore.

<body data-body>

Riferimento - http://api.jquery.com/attr/#attr-attributeName-value

attr (attributoNome, valore)


24
+1, ma l'OP sa che è un setter. Il fatto che passare una stringa vuota funzioni ma nullnon è sorprendente.
Jon,

2
Javasctipt ha alcuni comportamenti strani . Sapere dove si verificano queste stranezze eliminerà l'elemento sorpresa: P
Lix,

25
Nota: questo non funziona con jQuery 1.7.2 (so che non è l'ultima versione) ma l'utilizzo ha $(el).prop('data-body', true)funzionato per me dove ho $(el).attr('data-body', '')finito per impostare data-body = "data-body" per me.
Patrick O'Doherty,

6
@ PatrickO'Doherty $(el).prop('data-body', true)non funziona per me. attr()funziona ma aggiunge anche una stringa vuota come valore dell'attributo che voglio aggiungere.
Webdevotion

1
@Andrew Credo che tu stia cercando le funzioni removeAttr / prop . Dipende dall'attributo che stai cercando di rimuovere.
Lix,

47

Forse prova:

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

2
Solo questa soluzione ha funzionato per mevar btn = $(this).get(0); btn.setAttribute("disabled","");
gkiko,

1
Dopo aver pasticciato con .attr e .prop, come suggerito in tutte le altre soluzioni e commenti qui, ho finalmente scoperto che tornare (o almeno "a metà strada" indietro) al nativo JS, ha fatto il trucco, come suggerito nel commento sopra ... Saluti per quello!
TheCuBeMan

body.setAttribute("data-body","");questo imposterà il valore 'falso' del mio attributo, come posso impostare il valore "" (vuoto) di un attributo?
Archana Sharma

22

La risposta accettata non crea più un attributo solo nome (a partire da settembre 2017).

È necessario utilizzare il metodo prop () di JQuery per creare attributi di solo nome.

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

In realtà, mi sembra di aggiungere "value = 'true'" alla mia opzione di selezione, anziché solo "value". Ugh.
RonLugge,

mi chiedevo come la risposta accettata non contenesse questa soluzione! è il modo più pulito usando jquery.
Denns

Sfortunatamente non funziona con alcune opzioni a discesa, in Chrome purtroppo
MC9000,

7

Puoi farlo senza jQuery!

Esempio:

document.querySelector('button').setAttribute('disabled', '');
<button>My disabled button!</button>

Per impostare il valore di un attributo booleano, ad esempio disabilitato, è possibile specificare qualsiasi valore. Una stringa vuota o il nome dell'attributo sono valori consigliati. Tutto ciò che conta è che se l'attributo è presente, indipendentemente dal suo valore reale, il suo valore è considerato vero. L'assenza dell'attributo significa che il suo valore è falso. Impostando il valore dell'attributo disabilitato sulla stringa vuota (""), impostiamo disabilitato su true, il che comporta la disabilitazione del pulsante.

Da MDN Element.setAttribute ()


1
jQuery è troppo debole in questo senso. Meglio fare in javascript per non impazzire ogni volta che cambiano jquery o browser. Questo vale per tutti questi framework client buggy.
MC9000,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.