2015-12-02 5 views
5

This pytanie jest związane z moim i wyjaśnia, co to jest .data method w Jquery.przeznaczenie danych w jquery? (w porównaniu do dodawania własnych pól do obiektów Jquery)

Oprócz relacji do HTML5 data-* elementów atrybutów (jak <p class='foo_cl' data-bar='gee'>, na przykład), dlaczego miałbym kod:

$('body').data("my_lab", {some:"object"}); // §1 

zamiast

$('body').my_lab = {some:"object"};   // §2 

(Jestem zainteresowany głównie w przypadku gdzie selektor Jquery daje jeden obiekt, tak jak dla $('body') powyżej)

Później (§ 2) wydaje się bardziej czytelny i krótszy, i myślę, że byłby bardziej skuteczny niż ten pierwszy (§ 1). Oczywiście data jest selektor jQuery (ale mogę użyć each aby ustawić pole .my_lab, etc ...)

I może nawet rozważyć zmianę elementu DOM z brzydkie patrząc

$('body')[0].my_lab = {some:"object"};  // §3 is ugly 

(która jest chyba niezdefiniowane zachowanie, zobacz this)

oczywiście, istnieje potencjalna kwestia kolizji nazwę pola my_lab z jakimś istniejącym polu w realizacji JQuery; ale zakładam, że używanie zwykłego sufiksu (np. my_) w nazwach pól powinno wystarczyć.

FWIW, interesuje mnie tylko ostatnie Jquery (np. Jquery 2.1.4) na ostatnim Firefoksie (np. 38 lub 42) na Linuksie.

Innymi słowy, dlaczego dodawanie własnych pól w obiektach JQuery byłoby niezadowolone?

+0

trzecia jest w porządku, pierwsze dwa zestawy rekwizytów na tym, co zwykle jest przedmiotem/zbiorem. – dandavis

Odpowiedz

7

Robiąc

$('body').my_lab = {some:"object"}; 

ustawiania wartości do określonej jQuery owijki. Nie byłby w stanie reaccess dane z innego selektora:

$('body').my_lab = {some:"object"}; 
console.log($('body').my_lab); // will log undefined 

to dlaczego przy użyciu danych jest w zasadzie bardziej niezawodny

$('body').data('my_lab', {some:"object"}); 
console.log($('body').data("my_lab")); // will log {some: "object"} 

o 3 opcji: $("body")[0].attr = { my : "object" } część:

JQuery metoda danych zapobiega potencjalnym wyciekom pamięci podczas manipulowania dom/usuwanie elementów ze strony (poprzez usunięcie powiązanych danych i innych rzeczy) i unikania konfliktów atrybutów (takich jak ustawianie istniejących atrybutów domElement i innych subtelnych elementów)

Zasadniczo, jeśli masz aplikację jQuery w swojej aplikacji, nie masz właściwie żadnego powodu, aby wymyślać koło, wykonując ręczne powiązanie między elementem domowym a danymi javascript.

Powiązane problemy