2012-10-31 16 views
133

Come si imposta un attributo dati senza aggiungere un valore in jQuery? Voglio che questo:Imposta attributo senza valore

<body data-body> 

ho provato:

$('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 una stringa. È possibile impostare semplicemente un attributo senza valore?

+3

Perché è necessario 'data-body' vs.' data-body = "" '? –

+0

Almeno se si desidera utilizzare XHTML, non si dovrebbe farlo poiché [la minimizzazione degli attributi] (http://www.w3.org/TR/xhtml1/#h-4.5) non è consentita. – Matthias

+4

Non uso XHTML, utilizzo HTML5 – David

risposta

188

La funzione attr() è anche una funzione di 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 (attributeName, valore)

+20

+1, ma l'OP sa che è un setter. Il fatto che il passaggio di una stringa vuota funzioni ma "null" non è in qualche modo sorprendente. – Jon

+2

[Javasctipt ha alcuni comportamenti strani] (http://www.youtube.com/watch?v=kXEgk1Hdze0). Sapere dove queste stranezze accadranno eliminerà l'elemento di surprize: P – Lix

+23

Nota: Questo non funziona con jQuery 1.7.2 (so che non è l'ultima versione) ma usando '$ (el) .prop ('data-body ', true) 'ha funzionato per me dove' $ (el) .attr (' data-body ',' ') 'ha finito per impostare data-body =" data-body "per me. –

26

magari provare:

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

Solo questa soluzione ha funzionato per me 'var btn = $ (this) .get (0); btn.setAttribute ("disabile", ""); ' – gkiko

+0

Dopo fare in giro con .attr e .prop, come suggerito in tutte le altre soluzioni e commenti qui, ho finalmente scoperto che andando indietro (o almeno "mezza modo "indietro" a JS nativo, ha fatto il trucco, come suggerito nel commento sopra ... Saluti per questo! – TheCuBeMan

7

La risposta accettato non significa creare un nome- solo attributo più (come di settembre ember 2017).

si dovrebbe utilizzare il metodo JQuery prop() per creare nome di attributi di sola.

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

Grazie per questo, stavo impazzendo cercando di capire perché non funzionava. – RonLugge

+0

In realtà, sembra che aggiunga "value = 'true'" alla mia opzione select, anziché solo "value". Ugh. – RonLugge

Problemi correlati