2014-05-08 16 views
13

Dies erscheint sehr einfach, aber ich kann nicht sehen, warum es nicht funktioniert. Der Selektor ist korrekt, aber das div .faqContent wird einfach nicht mit dem Attribut data-height aktualisiert.jQuery Daten attr nicht Einstellung

$('.faqItem .faqContent').each(function(){ 
    var h = $(this).height(); 
    $(this).data('height',h); 
}); 

ich überprüft haben, dass var h richtig ist, ist es so richtig in colsole.log die Höhe halten.

BEARBEITEN Es ist absolut kein Konflikt, und die Konsole zeigt keine Fehler.

+4

FYI Wert gesetzt wird durch die .data() nicht reflektiert werden, während Sie diese Elemente Inspektion . –

+0

versuchen, den Wert zu trösten. So erhalten Sie den Wert für jeden. – Renjith

+3

Wenn Daten-Höhe attritbute bereits existiert und Sie versuchen, es zu aktualisieren, dann wird es nicht funktionieren ... Sie müssen '.attr (Datenhöhe, h)' –

Antwort

20

Sie können es nicht im Element Inspector sehen, aber es ist dort als jquery setzen Sie das Datenattribut intern.

versuchen console.log($(this).data('height'));

+0

Absolut Spot auf verwenden. Danke @Mohammad Adil, es ist da. – ggdx

+2

Wie verwirrend! Schreckliches Design. Danke aber :) –

36

Die data Funktion eine Menge Leute verwirrt, es ist nicht einfach.

:-)

data verwaltet jQuerys internes Datenobjekt für das Element, nichtdata-* Attribute. data verwendet nur data-* Attribute zum Festlegen Anfangswerte. Es nie setztdata-* Attribute auf Elementen.

Wenn Sie tatsächlich ein data-* Attribut festzulegen, verwenden attr:

$(this).attr("data-height", h); 

Aber wenn Sie nur diese Informationen für den späteren Gebrauch wollen, data ist in Ordnung, erwarten Sie nur nicht, dass es in der DOM zu sehen Inspector, da jQuery diese Informationen nicht in das DOM schreibt.

+1

große Antwort, löste das Geheimnis der Daten-Attribut.Hut ab! – 112233

2

.data() speichert nur den zugehörigen neuen Wert im Speicher (oder intern). Es wird das Attribut im DOM nicht ändern, daher können Sie es nicht mithilfe von Inspector-Tools aktualisieren.

Um das Attribut zu ändern, Sie .attr() verwenden:

$('.faqItem .faqContent').each(function(){ 
    var h = $(this).height(); 
    $(this).attr('data-height',h); 
}); 
0

JQuery .data() speichert den Wert auf das Element selbst, wird es nicht ein Attribut hinzufügen.

http://api.jquery.com/data/

Wenn Sie ein Attribut, Verwendung attr hinzufügen möchten:

$('.faqItem .faqContent').each(function(){ 
    var h = $(this).height(); 
    $(this).attr('data-height', h); 
}); 

http://api.jquery.com/attr/