Ostatnio coraz częściej czytam o ludziach używających niestandardowych atrybutów w swoich tagach HTML, głównie w celu osadzenia dodatkowych bitów danych do wykorzystania w kodzie javascript.
Miałem nadzieję zebrać opinie na temat tego, czy używanie niestandardowych atrybutów jest dobrą praktyką, a także na temat niektórych alternatyw.
Wygląda na to, że naprawdę może uprościć zarówno kod po stronie serwera, jak i po stronie klienta, ale również nie jest zgodny z W3C.
Czy powinniśmy korzystać z niestandardowych atrybutów HTML w naszych aplikacjach internetowych? Dlaczego lub dlaczego nie?
Dla tych, którzy uważają, że niestandardowe atrybuty to dobra rzecz: o czym należy pamiętać podczas ich używania?
Dla tych, którzy uważają, że niestandardowe atrybuty są złe: jakich alternatyw używasz, aby osiągnąć coś podobnego?
Aktualizacja: Najbardziej interesuje mnie rozumowanie różnych metod, a także wskazanie, dlaczego jedna metoda jest lepsza od innej. Myślę, że wszyscy możemy wymyślić 4-5 różnych sposobów na osiągnięcie tego samego. (ukryte elementy, skrypty wbudowane, dodatkowe klasy, parsowanie informacji z identyfikatorów itp.).
Aktualizacja 2: Wygląda na to, że data-
funkcja atrybutu HTML 5 ma tutaj wiele wsparcia (i raczej się zgadzam, wygląda na solidną opcję). Jak dotąd niewiele widziałem na temat obalenia tej sugestii. Czy są jakieś problemy / pułapki, które należy martwić o stosowanie tego podejścia? Czy może jest to po prostu „nieszkodliwe” unieważnienie obecnych specyfikacji W3C?
Odpowiedzi:
HTML 5 wyraźnie zezwala na niestandardowe atrybuty, które zaczynają się od
data
. Na przykład<p data-date-changed="Jan 24 5:23 p.m.">Hello</p>
jest poprawny. Ponieważ jest to oficjalnie obsługiwane przez standard, myślę, że jest to najlepsza opcja dla niestandardowych atrybutów. I nie wymaga przeciążania innych atrybutów hackami, więc Twój HTML może pozostać semantyczny.Źródło: http://www.w3.org/TR/html5/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes
źródło
Oto technika, której ostatnio używałem:
Obiekt komentarza jest powiązany z elementem nadrzędnym (tj. #Someelement).
Oto analizator składni: http://pastie.org/511358
Aby uzyskać dane dla dowolnego konkretnego elementu, wystarczy wywołać
parseData
odwołanie do tego elementu przekazane jako jedyny argument:Może być bardziej zwięzłe niż to:
Uzyskać dostęp do niego:
Jedyną wadą korzystania z tego jest to, że nie można go używać z elementami samozamykającymi się (np.
<img/>
), Ponieważ komentarze muszą znajdować się w elemencie, aby można je było uznać za dane tego elementu.EDYCJA :
Znaczące zalety tej techniki:
Oto kod parsera (skopiowany z powyższego hiperłącza http://pastie.org/511358 , na wypadek, gdyby kiedykolwiek stał się niedostępny na pastie.org):
źródło
Możesz utworzyć dowolny atrybut, jeśli określisz schemat swojej strony.
Na przykład:
Dodaj
Facebook (nawet tagi)
źródło
Najłatwiejszym sposobem uniknięcia użycia atrybutów niestandardowych jest użycie istniejących atrybutów.
używaj znaczących, odpowiednich nazw klas.
Na przykład zrób coś takiego:
type='book'
itype='cd'
, aby reprezentować książki i płyty CD. Klasy są znacznie lepsze do reprezentowania tego, czym coś jest .na przykład
class='book'
W przeszłości korzystałem z niestandardowych atrybutów, ale szczerze mówiąc, naprawdę nie ma takiej potrzeby, jeśli wykorzystujesz istniejące atrybuty w semantycznie znaczący sposób.
Aby podać bardziej konkretny przykład, załóżmy, że masz witrynę z linkami do różnych rodzajów sklepów. Możesz użyć następujących:
Stylowanie css może wykorzystywać takie klasy jak:
W powyższym przykładzie widzimy, że oba są linkami do sklepów (w przeciwieństwie do innych niepowiązanych linków w witrynie), a jeden to sklep z płytami CD, a drugi to księgarnia.
źródło
Osadź dane w dom i użyj metadanych dla jQuery .
Wszystkie dobre wtyczki obsługują wtyczkę metadanych (dopuszczając opcje dla poszczególnych tagów).
Umożliwia także nieskończenie złożone dane / struktury danych, a także pary klucz-wartość.
LUB
LUB
Następnie uzyskaj dane w następujący sposób:
źródło
Nie widzę problemu w korzystaniu z istniejących funkcji XHTML bez niszczenia czegokolwiek lub rozszerzania przestrzeni nazw. Rzućmy okiem na mały przykład:
Jak dodać dodatkowe informacje do some_content bez dodatkowych atrybutów? Co powiesz na dodanie kolejnego tagu, takiego jak poniżej?
Utrzymuje relację poprzez dobrze zdefiniowane id / rozszerzenie „_extended” według twojego wyboru i przez swoją pozycję w hierarchii. Często używam tego podejścia razem z jQuery i bez użycia technik podobnych do Ajax.
źródło
Nie. Wypróbuj coś takiego:
źródło
Nie używam niestandardowych atrybutów, ponieważ wypisuję XHTML, ponieważ chcę, aby dane były odczytywalne maszynowo przez oprogramowanie innych firm (chociaż mógłbym rozszerzyć schemat XHTML, gdybym chciał).
Jako alternatywę dla niestandardowych atrybutów, w większości uważam, że atrybuty id i class (np. Jak wspomniano w innych odpowiedziach) są wystarczające.
Rozważ to również:
Jeśli dodatkowe dane mają być czytelne dla człowieka, a także do odczytu maszynowego, należy je zakodować za pomocą (widocznych) znaczników HTML i tekstu zamiast jako niestandardowych atrybutów.
Jeśli nie musi być czytelny dla człowieka, być może można go zakodować za pomocą niewidocznych znaczników HTML i tekstu.
Niektóre osoby robią wyjątek: pozwalają na niestandardowe atrybuty dodane do DOM przez Javascript po stronie klienta w czasie wykonywania. Uważają, że jest to OK: ponieważ niestandardowe atrybuty są dodawane do DOM tylko w czasie wykonywania, HTML nie zawiera atrybutów niestandardowych.
źródło
Stworzyliśmy internetowy edytor, który rozumie podzbiór HTML - bardzo ścisły podzbiór (rozumiany prawie powszechnie przez klientów poczty). Musimy wyrazić takie rzeczy jak
<td width="@INSWIDTH_42@">
w bazie danych, ale nie możemy mieć tego w DOM, w przeciwnym razie przeglądarka, w której działa edytor, przestraszy (lub jest bardziej skłonna do dziwactwa niż do niestandardowych atrybutów) . Chcieliśmy przeciągnij i upuść, więc umieszczenie go wyłącznie w DOM nie było dostępne, podobnie jak jquery.data()
(dodatkowe dane nie zostały poprawnie skopiowane). Prawdopodobnie potrzebowaliśmy również dodatkowych danych, aby móc jeździć.html()
. Ostatecznie zdecydowaliśmy się na użycie<td width="1234" rs-width="@INSWIDTH_42@">
podczas procesu edycji, a następnie, kiedy POST wszystko, usuwamywidth
i przeprowadzamy regex wyszukiwania i niszczenias/rs-width=/width=/g
.Na początku facet, który napisał większość tego, był nazistowskim sprawdzaniem poprawności w tej kwestii i próbował wszystkiego, aby uniknąć naszego niestandardowego atrybutu, ale ostatecznie zgodził się, gdy nic innego nie wydawało się działać na WSZYSTKIE nasze wymagania. Pomogło, gdy zdał sobie sprawę, że niestandardowy atrybut nigdy nie pojawi się w wiadomości e-mail. Zastanawialiśmy się nad zakodowaniem naszych dodatkowych danych
class
, ale zdecydowaliśmy, że będzie to większe z dwóch zła.Osobiście wolę mieć czyste rzeczy i przekazywać weryfikatory itp., Ale jako pracownik firmy muszę pamiętać, że moim głównym obowiązkiem jest wspieranie sprawy firmy (zarabianie jak największej ilości pieniędzy tak szybko, jak to możliwe), a nie egoistycznej chęci czystość techniczna. Narzędzia powinny działać dla nas; nie my dla nich.
źródło
Wiem, że ludzie są temu przeciwni, ale wpadłem na bardzo krótkie rozwiązanie tego problemu. Jeśli chcesz użyć niestandardowego atrybutu, takiego jak „mój”, na przykład:
Następnie możesz uruchomić ten kod, aby odzyskać obiekt, tak jak robi to jquery.data ().
źródło
Specyfikacja: Utwórz kontrolkę Text.Box ASP.NET, która dynamicznie automatycznie formatuje tekst jako liczbę, zgodnie z właściwościami „DecimalSeparator” i „ThousandsSeparator”, przy użyciu JavaScript.
Jednym ze sposobów przeniesienia tych właściwości z formantu do JavaScript jest umożliwienie formancie renderowania właściwości niestandardowych:
Własne właściwości są łatwo dostępne przez JavaScript. I chociaż strona korzystająca z elementów o niestandardowych właściwościach nie zostanie zweryfikowana , nie wpłynie to na jej rendering.
I tylko korzystać z tej metody, kiedy chcę, aby skojarzyć typów prostych jak i ciągów liczb całkowitych do elementów HTML do użytku z JavaScript. Jeśli chcę ułatwić identyfikację elementów HTML, skorzystam z właściwości klasy i id .
źródło
W przypadku złożonych aplikacji internetowych upuszczam niestandardowe atrybuty w dowolnym miejscu.
Aby uzyskać więcej publicznych stron, używam atrybutu „rel” i zrzucam tam wszystkie dane w JSON, a następnie dekoduję je za pomocą MooTools lub jQuery:
Próbuję ostatnio trzymać się atrybutu danych HTML 5 tylko po to, by „przygotować się”, ale nie przyszło to jeszcze naturalnie.
źródło
Cały czas używam niestandardowych pól, na przykład <ai = "" .... Następnie odwołanie do i z jquery. Nieprawidłowy HTML, tak. Działa dobrze, tak.
źródło
Moim skromnym zdaniem niestandardowe atrybuty nie powinny być używane, ponieważ nie sprawdzają poprawności. Alternatywnie możesz zdefiniować wiele klas dla jednego elementu, takich jak:
źródło
class
atrybut zdecydowanie nie jest zarezerwowany tylko dla „wyglądu”. Innym zastosowaniem jest „przetwarzanie ogólnego przeznaczenia przez aplikacje klienckie”. O tym mówi specyfikacja: w3.org/TR/REC-html40/struct/global.html#h-7.5.2