2012-10-31 12 views
133

Wie lege ich ein Datenattribut fest, ohne einen Wert in jQuery hinzuzufügen? Ich möchte dies:Attribut ohne Wert festlegen

<body data-body> 

Ich habe versucht:

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

Alles anderes scheint das zweite Argument als String hinzuzufügen. Ist es möglich, ein Attribut ohne Wert zu setzen?

+3

Warum brauchen Sie 'data-body' vs.' data-body = "" '? –

+0

Zumindest, wenn Sie XHTML verwenden möchten, sollten Sie das nicht tun, da [Attribut Minimierung] (http://www.w3.org/TR/xhtml1/#h-4.5) nicht erlaubt ist. – Matthias

+4

Ich verwende kein XHTML, ich benutze HTML5 – David

Antwort

188

Die attr()-Funktion ist auch eine Setter-Funktion. Sie können einfach eine leere Zeichenfolge übergeben.

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

Eine leere Zeichenkette wird einfach das Attribut ohne Wert schaffen.

<body data-body> 

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

attr (attribute, Wert)

+20

+1, aber das OP weiß, dass es ein Setter ist. Die Tatsache, dass das Übergeben einer leeren Saite funktioniert, aber "null" ist, ist nicht überraschend. – Jon

+2

[Javasctipt hat einige seltsame Verhaltensweisen] (http://www.youtube.com/watch?v=kXEgk1Hdze0). Zu wissen, wo diese Seltsamkeiten auftreten, wird das Element von surprize herausnehmen: P – Lix

+23

Hinweis: Dies funktioniert nicht mit jQuery 1.7.2 (ich weiß, dass das nicht die neueste Version ist), aber mit '$ (el) .prop ('data-body ', true) 'arbeitete für mich, wo' $ (el) .attr (' data-body ',' ') 'endete und daten-body =" data-body "für mich einstellte. –

26

Vielleicht versuchen:

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

Nur diese Lösung funktionierte für mich 'var btn = $ (this) .get (0); btn.setAttribute ("disabled", ""); ' – gkiko

+0

Nachdem ich mit .attr und .prop herumgespielt habe, wie es in allen anderen Lösungen und Kommentaren vorgeschlagen wurde, fand ich endlich heraus, dass (oder zumindest " halb Weg "zurück) zu nativen JS, hat den Trick, wie im obigen Kommentar vorgeschlagen ... Cheers dafür! – TheCuBeMan

7

Die akzeptierte Antwort schafft keine Namen- nur noch Attribut (ab Sept Ember 2017).

Sie sollten die Methode JQuery prop() verwenden, um Nur-Namen-Attribute zu erstellen.

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

Vielen Dank dafür, ich war verrückt, herauszufinden, warum es nicht funktionierte. – RonLugge

+0

Tatsächlich scheint ich meiner ausgewählten Option "value = 'true'" hinzuzufügen, anstatt nur "value". Pfui. – RonLugge