2009-08-05 12 views
5

Wiążę rzeczy z obiektami HTML za pomocą javascript i potrzebuję nieco bardziej wyrafinowanego mechanizmu niż tylko nazwy klas.Najlepszy sposób reprezentowania par klucz/wartość w nazwach klas HTML

Moje pierwsze podejście było używać nazw klas jak deklaracje struktura, gdzie wiązanie jest na pozycji nazwy jak tak:

Definition = identifier: foo bar baz 

Kodowanie jakąś nazwę klasy z tej definicji daje

<p id="someid" class="identifier bish bash bosh"> 
<div id="anotherid" class="identifier heebie jeebie"> 

Może to wtedy należy czytać jako:

{foo: bish, bar: bash, baz: bosh}; 
{foo: heebie, bar: jeebie} 

Należy pamiętać, że wiązania mają różne wartości rs parametrów.

To jest bardzo delikatne. Nie mogę ozdobić żadnych elementów html dodatkowymi nazwami (na przykład, aby dodać zachowania jquery takie jak przeciąganie i upuszczanie itp.) I ogólnie jest trochę tandetna ...

Chciałbym je reprezentować jako Główne pary wartości tak:

<p id="someid" class="id{foo:bish} id{bar:bash} id{baz:bosh} random class"> 
<div id="anotherid" class="ui-draggable id{bar:jeebie} id{foo:heebie}"> 

co pozwala mi mieć losową pozycjonowanie i losową długość nazw klas elementów przewidzianych na moje ID to jakoś GUID (ale mogę „make że tak” ręcznie dość łatwo ...)

Teraz, in theory, nazwy klas są CDATA, więc wszystko powinno być tickety-boo, ale mam hae ma do zrobienia! szczególnie na starej stronie przeglądarki ...

Porady, sugestie, wcześniejsze sztuki, najlepsza praktyka w zakresie najlepszej składni par KV w nazwach klas, które zostały z wdzięcznością przyjęte.

Odpowiedz

4

HTML5 zamierza dodać atrybuty danych * tylko do tego celu, a te już działają w każdej przeglądarce dzisiaj (ale mogą wysłać kilka weryfikatorów pętli).

http://ejohn.org/blog/html-5-data-attributes/

<li class="user" data-name="John Resig" data-city="Boston" 
    data-lang="js" data-food="Bacon"> 
    <b>John says:</b> <span>Hello, how are you?</span> 
</li> 
+0

Kiedy mówisz "każda przeglądarka", co dokładnie masz na myśli? Z pewnością jest kilka przeglądarek, w których nie będzie obsługiwane? IE6? Jakie są granice wsparcia dla tego ... –

+0

Nie wiem, skoro go nie używałem. Ale jak rozumiem, jest to jedna z tych dziwactw, które zawsze działały ze względu na to, że przeglądarki są parserem zupa (tylko teraz są standaryzacji). Nie jest to poprawny html ofcourse (chyba że używasz html5 doctype, który działa na IE6), ale są sposoby na dodanie tych atrybutów po załadowaniu strony, więc walidatory nie narzekają. –

+0

Serweruję stronę z tymi KV, a potem używam biblioteki po załadowaniu, aby zrobić całą magię ... –

1

Numer allowed className characters pomoże określić, czego należy użyć.

Dla mnie, będę skłaniać się coś takiego:

keys: soft, hard, wet, hot 
values: foo, bar, baz, fuzz 

class="soft_bar wet_foo hot_fuzz" 

w szczególności szelki {} nie będzie działać, ponieważ są one stosowane w arkuszach stylów CSS, aby zaznaczyć bloki właściwości stylu.

+0

Nazwy klas KV-pair są używane do wiązania javascript oraz inne nazwy klas są wykorzystywane do CSS stylizacji - tak ja nie przeszkadza w ogóle, jeżeli nie mogą one być związane przez CSS zasady. Rozumiem, że nadal będą działać (trzeba spróbować i zobacz chociaż ...) –

0

konieczne jest, aby w tej klasie ?, można utworzyć dane dla klucz/wartość w Nowym atr

$("#someid").attr("key_val", "id{foo:bish} id{bar:bash} id{baz:bosh}"); 
+0

Jeśli to był prawidłowy sposób, po prostu użyłbym $ ("# someid" .attr (key, val)); ale możesz to zrobić? –

0

Jeśli nie jesteś zaniepokojony ważnego HTML, można po prostu zamiast używać nazw arbitralnych atrybutów próby przejęcia atrybutu "klasa".

<p id="someid" foo="bish" bar="bash" baz="bosh"> 

i dostęp do ich wartości z jQuery poprzez:

$("#someid").attr("foo"); // "bish" 
+0

Nie przejmuję się poprawnym kodem HTML :) ale podejrzewam, że inne osoby ", które mogłyby chcieć użyć stron powiązanych z tą biblioteką, to ... –

0

mógłbyś otoczyć dany obiekt z div lub rozciągać? Następnie użyj atrybutów id i/lub class, aby zapisać pary nazwa-wartość i uzyskać do nich dostęp za pomocą właściwości nadrzędnej.

<span id="foo_bar_baz" class="bish_bash_bosh"><p id="someid"></span> 

Pozwala to zrobić cokolwiek chcesz na oryginalnym obiekcie.

+0

Każda inna używana biblioteka na stronie (JQuery itp.) Będzie się wiązała do obiektu - powiązanie z rodzicami obiektu naruszyłoby "zasadę najmniejszego zdziwienia" (myślę ...) –

Powiązane problemy