# 20: Data! data-*! .data()! .attr (data- *)! - Triky CSS

Anonim

Data. Ve světě jQuery je to všechno o bitech informací, které jsou připojeny přímo k prvkům (spíše než, řekněme, proměnné, které mají pouze onus). Existuje spousta způsobů, jak ukládat bitová data na „straně klienta“ (spíše v prohlížeči než na serveru). K dispozici jsou proměnné jakéhokoli druhu, soubory cookie, localStorage, indexDB a kdo ví, co všechno ostatní. Data se používají, když jsou tato data konkrétně relevantní pro konkrétní prvek.

Stejně jako mnoho metod jQuery má jak setter (dva parametry):

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

a getr (jeden parametr):

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

Můžete jej použít na libovolný objekt jQuery. Pokud je v tomto objektu více prvků, všechny tyto hodnoty získají, když je použijete jako setter. Pokud v objektu existuje více prvků, když ho použijete jako getr, použije první prvek.

Jedním ze způsobů, jak možná přemýšlet o datech, je, že prvek je něco jako jmenný prostor. Mnoho prvků může používat stejný datový „název“, ale mají různé hodnoty.

Ve staré ukázce CSS-Tricks, posuvníku Map Google, existuje skutečný případ použití. V této ukázce je seznam míst a vložená mapa Google. Když umístíte ukazatel myši nad místa, mapa se přesune do středu tohoto místa. K tomu potřebuje mapové API souřadnice. Má smysl mít tato data v HTML pro tato místa, ale nemusíme je vidět. To je perfektní případ použití data-*atributů v HTML (nové v HTML5). Položka seznamu v tomto seznamu míst pak může vypadat takto:


  • O'Hare Airport

    Flights n' stuff

    About: Info about location…

  • data-*je jen způsob, jak to říct data- anything . Můžete jen vytvořit datové atributy. Cokoli chceš. V tomto případě jsme vytvořili jeden pro zeměpisnou šířku a jiný pro zeměpisnou délku. Když se na této položce seznamu spustí událost vznášení myši, jednoduše použijeme getter jQuery pro .data()vytrhnutí informací a použití s ​​API.

    Takže teď jsme se podívali na data dvěma způsoby, a to na data, která jsou nastavena a získána ze samotného JavaScriptu, a data, která začínají v HTML a jsou používána JavaScriptem. Oba jsou v pořádku a API je stejné. Možná si pomyslíte, že použití .data()jako getru pro informace v rel = "jQuery">$("#thing").attr("rel"); // or any other attribute

    Můžete to také použít, pokud chcete:

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

    .data()Kariérista je jen zkratka. A docela se mi líbí, protože vás dostane do správného myšlení.

    Je však důležité si uvědomit, že použití .data()jako setter ve skutečnosti nezmění data-*atribut v HTML . To je dobré výchozí nastavení, protože nezměnění modelu DOM znamená, že je rychlejší. Pokud absolutně potřebujete změnit atribut v HTML, použijte .attr()metodu jako setter. Všimněte .attr()si také, že je třeba uvést předponu „data-“, kterou nepotřebujete používat .data().

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

    Možná to budete muset udělat, abyste si byli jisti, že mají přístup i jiné části aplikace, nebo pokud děláte něco jako psaní selektorů CSS, které je znovu (např. (data-something="whatever") ( ))