2014-05-08 16 views
13

To wydaje się bardzo proste, ale nie widzę, dlaczego nie działa. Selektor jest poprawny, ale div .faqContent po prostu nie jest aktualizowany atrybutem data-height.jQuery data attr nie ustawienie

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

Sprawdziłem że var h jest poprawna, to w colsole.log jak słusznie trzymając wysokość.

EDIT To absolutnie nie konflikt, a konsola nie pokazuje żadnych błędów.

+4

FYI wartość jest ustalana przez .data() nie zostaną uwzględnione podczas kontroli tych elementów . –

+0

spróbuj pocieszyć wartość. więc otrzymasz wartość dla każdego. – Renjith

+3

jeśli data-attritbute już istnieje i próbujesz ją zaktualizować, to nie będzie działać ... musisz użyć '.attr (data-height, h)' –

Odpowiedz

20

Nie będzie można zobaczyć go w inspektorze elementów, ale jest tam jako jquery ustawić atrybut danych wewnętrznie.

spróbować console.log($(this).data('height'));

+0

Absolutnie na miejscu. Dzięki @Mohammad Adil, jest tam. – ggdx

+2

Jak mylące! Straszny projekt. Dziękuję :) –

36

Funkcja data myli wiele osób, nie tylko ty. :-)

data zarządza wewnętrzny obiekt danych jQuery dla elementu, niedata-* atrybuty. data używa tylko atrybutów data-* do ustawiania wartości początkowych . Nigdy nie ustawiadata-* atrybutów na elementach.

Jeśli chcesz faktycznie ustawić atrybut data-* użyć attr:

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

Ale jeśli chcesz tylko tych informacji do wykorzystania w przyszłości, data jest w porządku, po prostu nie należy się spodziewać, aby zobaczyć go w DOM inspektora, ponieważ jQuery nie zapisuje tej informacji w DOM.

+1

świetna odpowiedź, rozwiązała zagadkę atrybutu data.Czapki z głów! – 112233

2

.data() zapisuje tylko powiązaną nową wartość w pamięci (lub wewnętrznie). Nie spowoduje to zmiany atrybutu w DOM, dlatego nie można go zaktualizować za pomocą narzędzi inspektora.

Aby zmienić atrybut, można użyć .attr():

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

JQuery .data() przechowuje wartość na samego elementu, nie będzie dodać atrybut.

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

Jeśli chcesz dodać atrybut, należy użyć attr:

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

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

Powiązane problemy