2009-08-20 12 views
41

Możliwe duplikaty:
Custom attributes - Yay or nay?
Non-Standard Attributes on HTML Tags. Good Thing? Bad Thing? Your Thoughts?Czy można dodać własne atrybuty do elementów HTML?

W bieżącym projekcie uczenia Pracuję nad muszę dodać atrybut, którego wartość będzie liczbą. Początkowo myślałem o użyciu "id" w tym celu, ale an answer ujawnił, że nie jest to dobre.

Czy mogę utworzyć własny atrybut, powiedz "messid" i przypisać do niego wartość liczbową, taką jak "12", "6" itd?

Oto dlaczego chcę to zrobić, aby móc poprawić mnie, jeśli robię to całkowicie źle: Potrzebuję uzyskać dostęp do tego numeru w moim JavaScript (przy użyciu jQuery). Po prostu wzięcie wartości atrybutu jest łatwe, ale wyodrębnienie wartości numerycznej z ciągu jak "m12" lub "m6" jest uciążliwe. (Jestem początkującym w świecie JavaScript.)

Odpowiedz

90

Odnotowano wiele dyskusji na ten temat:

Pod koniec dnia, jestem na obozie, który wierzy atrybuty danych są najlepsza droga. Są wprowadzane w HTML5, aby uniknąć konfliktów nazw. Zasadniczo, jeśli chcesz przechowywać dane Wszystko związane wystarczy poprzedzić „teleinformatyczny” w nazwie atrybutu:

<div class="user" data-userid="5"></div> 

Jedyną wadą do Całość jest następnie, że XHTML nie zweryfikuje, ale szczerze don Nie przejmuj się tym. (Tak, powiedziałem)

+9

+1. Całkowicie się zgadzam, że to podejście jest działającym rozwiązaniem, które jest proste do wdrożenia i niczego nie niszczy. Pragmatyzm ponad idealizmem wygrywa również w mojej książce. – AnthonyWJones

+1

Poszedłbym z tym, ponieważ działa dzisiaj, a ponieważ jest w specyfikacji HTML5, prawdopodobnie za 10 lat będzie działać. Dane są również niezależne od innych wartości (takich jak zachowanie go w atrybucie "id", które mogą być później zmieniane z innych powodów), zachowując je jednocześnie w elemencie. I tak, błędy sprawdzania poprawności HTML powinny być postrzegane jako zalecenia/wskazówki do problemów, a nie do naprawiania błędów (i na tej ścieżce powiedziałbym to samo dla JSLint tylko po to, żeby trochę pomieszać =) – Blixt

+6

"Tak, zgadza się, Powiedziałem to "- przyznaje to pierwszy krok. ;) – nickf

-8

Nie - it's not.

+0

Haters - co mówiłem źle? Czy to dobrze, jeśli witryna nie przejdzie weryfikacji W3? –

+1

Głosowałem za tym * tylko dlatego, * że uważam, że jest to prawdziwa odpowiedź; chociaż zaryzykowałbym przypuszczenie, że głosowanie w dół wynikało z braku wyjaśnienia. I nie, nie sądzę, że wystarczy podać link. Uważam, że powinieneś przynajmniej podsumować stronę, do której prowadzi link, nawet jeśli nie zdecydujesz się wytłumaczyć * siebie *. –

+1

@Arnis: Może być, może nie, ale jak ciężko by było, abyś włączyła tę niewielką ilość tekstu do swojej "odpowiedzi"? – AnthonyWJones

8

W HTML 5 można dodać dowolny atrybut zaczynający się od data-, np. <div data-messid="12"> jest OK.

HTML 4 i XHTML 1 nie będą sprawdzane, jeśli dodasz własny atrybut, ale poza tym nic złego się nie stanie, jeśli wybierzesz wystarczająco unikatową nazwę atrybutu (aby nie kolidowała z żadnym bieżącym lub przyszłym atrybutem HTML).

2

Używam atrybutów niestandardowych, a ponieważ są one obsługiwane przez wszystkie przeglądarki, które sprawdziłem, uważam, że nie jest to złe. Możesz również użyć niestandardowych znaczników HTML do symulacji HTML5, z pewnym hackem IE, więc dlaczego nie używać atrybutów, jeśli nie potrzebują żadnych hacków?

W każdym razie, można przeczytać podobną dyskusję tutaj: Custom attributes - Yea or nay?

1

To nie jest ostateczna odpowiedź, ale po mieliśmy to zrobić w przeszłości, mogę powiedzieć, że to nie tylko działa dobrze, to jest cross-browser przyjazny.

5

Tak wiesz, można łatwo wyodrębnić identyfikator z ciągu znaków, takich jak M12 lub M6, zrobiłbym to tak:

//name the IDs m_12, m_3 etc 
var number = $('#someElement').attr('id').split('_')[1]; 

Lub jeśli powiedzmy, masz kilka linków z numerami w Identyfikator jak wyżej, a wszystkie linki mają klasę clickMe:

$('a.clickMe').click(function() { 
    alert($(this).attr('id').split('_')[1]); 
}); 
+0

Tak zwykle robię, jeśli mam po prostu identyfikator, który chcę odzyskać, ale czasami jest coś więcej. –

+0

Żałuję, że nie mogę przegłosować tylko raz :) – codelame

1

Jeśli jQuery można użyć .data do przechowywania informacji niestandardowych przeciwko elementu.

Wadą atrybutów niestandardowych są:

  • IE6 tworzy dodatkowe obiekty do przechowywania niestandardowe „EXPANDO” Atrybuty te mają skłonność do wycieku szczególnie jeśli są one tworzone za pomocą skryptu.

  • walidacji wydaje

+0

Używam ASP.NET MVC i próbuję dodać niestandardowy atrybut "data-messid" przy użyciu parametru htmlAttribs metod html helper: new {@class = "mcf", data-dd = Html.AttributeEncode (m.ID)}. Ale to nie działa (problem z składnią). Widzę, że jesteś aktywny w tagu ASP.NET MVC, więc proszę mi pomóc, jak to zrobić? – Hemant

+0

Pewnie - zapytaj innego Q za pomocą tagu mvc asp.net – redsquare

+0

, chociaż to, co masz, wygląda na poprawne – redsquare

Powiązane problemy