# 20: Dane! dane-*! .dane()! .attr (data- *)! - CSS-Tricks

Anonim

Dane. W świecie jQuery chodzi o bity informacji, które są dołączane bezpośrednio do elementów (a nie, powiedzmy, zmienne, które obciążają tylko siebie). Jest mnóstwo sposobów zapisywania bitów danych po „stronie klienta” (w przeglądarce, a nie na serwerze). Istnieją zmienne dowolnego rodzaju, pliki cookie, localStorage, indexDB i kto wie, co jeszcze. Dane są wykorzystywane, gdy są one szczególnie istotne dla określonego elementu.

Podobnie jak wiele metod jQuery ma zarówno metodę ustawiającą (dwa parametry):

$("#thing").data("name", "value");

i getter (jeden parametr):

$("#thing").data("name"); // "value"

Możesz go użyć na dowolnym obiekcie jQuery. Jeśli w tym obiekcie znajduje się wiele elementów, wszystkie z nich uzyskują tę wartość danych, gdy używasz go jako ustawiającego. Jeśli w tym obiekcie jest wiele elementów, gdy używasz go jako metody pobierającej, użyje pierwszego elementu.

Jednym ze sposobów myślenia o danych jest to, że element jest czymś w rodzaju przestrzeni nazw. Wiele elementów może używać tej samej „nazwy” danych, ale mieć różne wartości.

Istnieje prawdziwy przykład użycia w starej wersji demonstracyjnej CSS-Tricks, Google Maps Slider. W tym demo znajduje się lista lokalizacji i osadzona mapa Google. Gdy najedziesz kursorem na lokalizacje, mapa przesunie się do środka tej lokalizacji. Aby to zrobić, interfejs API mapy potrzebuje współrzędnych. Sensowne jest posiadanie tych danych w kodzie HTML dla tych lokalizacji, ale nie musimy ich widzieć. To doskonały przypadek użycia data-*atrybutów w HTML (nowość w HTML5). W takim przypadku element listy na liście lokalizacji może wyglądać następująco:


  • O'Hare Airport

    Flights n' stuff

    About: Info about location…

  • data-*to tylko sposób na powiedzenie data- anything . Możesz po prostu stworzyć atrybuty danych. Cokolwiek chcesz. W tym przypadku utworzyliśmy jeden dla szerokości geograficznej, a inny dla długości geograficznej. Kiedy zdarzenie najechania myszą jest uruchamiane na tym elemencie listy, po prostu używamy metody pobierania jQuery, .data()aby usunąć informacje i użyć ich z interfejsem API.

    Więc teraz przyjrzeliśmy się danym na dwa sposoby: dane, które są zarówno ustawione, jak i pobrane z samego JavaScript, oraz dane, które zaczynają się w HTML i są używane przez JavaScript. Oba są w porządku, a interfejs API jest taki sam. Możesz pomyśleć o użyciu .data()jako metody pobierającej informacje w rel = "jQuery">$("#thing").attr("rel"); // or any other attribute

    Możesz go również użyć w ten sposób, jeśli chcesz:

    $("#thing").attr("data-geo-lat");

    .data()Getter jest tylko skrót. I trochę mi się to podoba, ponieważ wprowadza cię we właściwy sposób myślenia.

    Należy jednak zauważyć, że użycie .data()jako setera w rzeczywistości nie zmienia data-*atrybutu w kodzie HTML . To dobre ustawienie domyślne, ponieważ brak zmiany DOM oznacza, że ​​jest szybszy. Jeśli absolutnie musisz zmienić atrybut w kodzie HTML, użyj .attr()metody jako ustawiającej. Zwróć również uwagę, .attr()że używanie musi zawierać przedrostek „data-”, którego nie potrzebujesz .data().

    $("#thing").attr("data-name", "Chris");

    Być może będziesz musiał to zrobić, aby mieć pewność, że inne części aplikacji mają dostęp lub jeśli robisz coś takiego, jak pisanie selektorów CSS przeciwko nim (np. (data-something="whatever") ( ))