$('div').data('info', 1);
alert($('div').data('info'));
//this works
$('div[data-info="1"]').text('222');
//but this don't work
Tworzę element w jquery. Następnie chcę dodać atrybut „dane”. Jest jak i jest dodawany, ale w DOM nie jest to widoczne i nie mogę uzyskać tego elementu, używając
$('div[data-example="example"]').html()
jquery
html
custom-data-attribute
Luntegg
źródło
źródło
.data()
chyba że naprawdę masz powód, aby użyć.attr()
..data()
nie działa. Nie dodaje atrybutu danych do DOM i nie otrzymuję elementu według atrybutu danych ...data(key, val)
że utworzy attr. ktoś wie, dlaczego nie?Note that this doesn't create an actual data-info attribute. If you need to create the attribute, use .attr():
To był klucz do mojego problemu. Wielkie dzięki.jQuery's .data () robi kilka rzeczy, ale nie dodaje danych do DOM jako atrybutu. Podczas używania go do pobierania atrybutu danych, pierwszą rzeczą, jaką robi, jest utworzenie obiektu danych jQuery i ustawienie wartości obiektu na atrybut danych. Następnie jest zasadniczo oddzielony od atrybutu danych.
Przykład:
Jeśli przechwycisz wartość atrybutu za pomocą
.data('foo')
, zwróci on „bar” zgodnie z oczekiwaniami. Jeśli następnie zmienisz atrybut za pomocą,.attr('data-foo', 'blah')
a później użyjesz.data('foo')
do pobrania wartości, zwróci on „bar”, nawet jeśli DOM tak mówidata-foo="blah"
. Jeśli użyjesz.data()
do ustawienia wartości, zmieni to wartość w obiekcie jQuery, ale nie w DOM.Zasadniczo
.data()
służy do ustawiania lub sprawdzania wartości danych obiektu jQuery. Jeśli go sprawdzasz, a jeszcze go nie ma, tworzy wartość na podstawie atrybutu danych znajdującego się w DOM..attr()
służy do ustawiania lub sprawdzania wartości atrybutu elementu DOM i nie wpływa na wartość danych jQuery. Jeśli potrzebujesz ich obu do zmiany, użyj obu.data()
i.attr()
. W przeciwnym razie trzymaj się jednego lub drugiego.źródło
w Jquery „ dane ” nie są domyślnie odświeżane:
Zamiast tego użyjesz „ attr ” do aktualizacji na żywo:
źródło
źródło
Użycie
.data()
spowoduje dodanie danych do obiektu jQuery tylko dla tego elementu. Aby dodać informacje do samego elementu, musisz uzyskać dostęp do tego elementu za pomocą jQuery.attr
lub natywnego.setAttribute
Aby uzyskać dostęp do elementu z ustawionym atrybutem, możesz po prostu wybrać na podstawie tego atrybutu, jak zauważyłeś w swoim poście (
$('div[data-info="1"]')
), ale kiedy używasz.data()
, nie możesz. Aby dokonać wyboru na podstawie.data()
ustawienia, musisz użyć funkcji filtru jQuery.jsFiddle Demo
źródło
aby uzyskać tekst z pliku
źródło