2009-08-05 9 views
5

मैं जावास्क्रिप्ट का उपयोग करके HTML ऑब्जेक्ट्स को बाध्यकारी कर रहा हूं और केवल वर्ग नामों की तुलना में थोड़ा अधिक परिष्कृत तंत्र की आवश्यकता है।एचटीएमएल कक्षा नामों में कुंजी/मूल्य जोड़े का प्रतिनिधित्व करने का सबसे अच्छा तरीका

मेरा पहला दृष्टिकोण संरचना घोषणाओं जहां बंधन के रूप में इतना नाम स्थिति पर है की तरह वर्ग नामों का उपयोग करने के लिए किया गया था:

Definition = identifier: foo bar baz 

इस परिभाषा के साथ कुछ वर्ग के नाम एन्कोडिंग देता

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

यह तो कर सकते हैं के रूप में पढ़ें:

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

ध्यान दें कि बाइंडिंग में अलग-अलग अंक हैं पैरामीटर के आरएस।

यह बहुत नाजुक है। मैं अतिरिक्त नामों के साथ किसी भी एचटीएमएल तत्वों को सजाने नहीं कर सकता (उदाहरण के लिए ड्रैग और ड्रॉप इत्यादि जैसे jQuery व्यवहार जोड़ने के लिए) और आम तौर पर थोड़ा सा शोर ...

मैं जो करना चाहता हूं वह उनका प्रतिनिधित्व करता है इसलिए जैसे प्रमुख मूल्य जोड़े:

<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}"> 

मुझे यादृच्छिक स्थिति और मेरे आईडी प्रदान की तत्वों पर वर्ग नामों में से यादृच्छिक लंबाई की अनुमति देता है जो एक sorta GUID है (लेकिन मैं 'बनाने कि इतने' कर सकते हैं मैन्युअल रूप से आसानी से पर्याप्त ...)

अब, in theory, कक्षा नाम सीडीएटीए हैं, इसलिए सब कुछ टिकटी-बू होना चाहिए, लेकिन मैं hae ma doots! विशेष रूप से पुराने क्रॉस-ब्राउज़र पक्ष पर ...

सलाह, सुझाव, पूर्व कला, कक्षा के नामों में केवी जोड़े के लिए सर्वोत्तम वाक्यविन्यास पर सर्वोत्तम अभ्यास सभी कृतज्ञतापूर्वक प्राप्त हुए।

उत्तर

4

एचटीएमएल 5 इस डेटा के लिए डेटा- * विशेषताओं को जोड़ने जा रहा है, और ये पहले से ही हर ब्राउज़र में काम करते हैं (लेकिन एक लूप के लिए कुछ वैधकर्ता भेज सकते हैं)।

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

जब आप 'हर ब्राउज़र' कहते हैं तो आपका क्या मतलब है? निश्चित रूप से कुछ ब्राउज़र हैं जिनके लिए इसका समर्थन नहीं किया जाएगा? IE6? इसके लिए समर्थन की सीमाएं क्या हैं ... –

+0

मुझे नहीं पता, क्योंकि मैंने इसका उपयोग नहीं किया है। लेकिन जैसा कि मैं समझता हूं कि यह उन quirks में से एक है जो ब्राउज़रों के कारण टैग सूप पार्सर्स होने के कारण हमेशा काम करता है (केवल अब वे इसे मानकीकृत कर रहे हैं)। यह वैध एचटीएमएल का नहीं है (जब तक कि आप एचटीएमएल 5 डॉक्ट टाइप का उपयोग नहीं कर रहे हैं, जो आईई 6 पर काम करता है), लेकिन पेज लोड होने के बाद इन विशेषताओं को जोड़ने के तरीके हैं, इसलिए वैधकर्ता शिकायत नहीं करते हैं। –

+0

मैं इन केवी के साथ पृष्ठ को सर्वर करता हूं और फिर सभी जादू बनाने के लिए लाइब्रेरी पोस्ट-लोड का उपयोग करता हूं ... –

1

allowed className characters आपको यह निर्धारित करने में मदद करेगा कि क्या उपयोग करना है।

मेरे लिए, मैं की तरह कुछ की ओर झुक जाएगा:

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

class="soft_bar wet_foo hot_fuzz" 

विशेष रूप से, ब्रेसिज़ के रूप में वे सीएसएस स्टाइलशीट में उपयोग किया जाता शैली गुण के ब्लॉक चिह्नित करने के लिए {} काम नहीं करेगा।

+0

केवी-जोड़ी वर्ग नाम के लिए जावास्क्रिप्ट बाइंडिंग और अन्य वर्ग के नाम सीएसएस स्टाइल के लिए उपयोग किया जाता है प्रयोग किया जाता है करने के लिए कर रहे हैं - तो मैं सब अगर वे सीएसएस द्वारा करने के लिए बाध्य नहीं किया जा सकता पर परेशान नहीं कर रहा हूँ नियम। मेरी समझ यह है कि वे अभी भी काम करेंगे (इसे आजमाएं और देखें ...) –

0

यह आवश्यक है इस वर्ग में आप attr

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

यदि यह जाने का वैध तरीका था, तो मैं बस $ ("# someid" .attr (key, val)) का उपयोग करता हूं; लेकिन क्या आप ऐसा कर सकते हैं? –

0

नई में कुंजी/मान के लिए एक डेटा बना सकते हैं ?, कि आप मान्य HTML के बारे में चिंतित नहीं हैं, तो आप सिर्फ बजाय मनमाने ढंग से विशेषता नाम इस्तेमाल कर सकते हैं "वर्ग" विशेषता को हाइजैक करने की कोशिश कर रहा है।

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

और के माध्यम से jQuery से उनके मूल्यों का उपयोग:

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

मैं वैध HTML के बारे में चिंतित नहीं हूं :) लेकिन मुझे संदेह है कि अन्य लोगों के बाहर 'इस पुस्तकालय से जुड़े पृष्ठों का उपयोग करना चाहेंगे ... –

0

आप एक div में विचाराधीन वस्तु के चारों ओर या अवधि सकते हैं? फिर नाम-मूल्य जोड़े को स्टोर करने और उन्हें मूल संपत्ति के साथ एक्सेस करने के लिए आईडी और/या क्लास विशेषताओं का उपयोग करें।

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

यह आपको मूल वस्तु को जो भी करना चाहते हैं, करने की अनुमति देता है।

+0

पृष्ठ पर उपयोग में आने वाली हर दूसरी लाइब्रेरी (JQuery आदि) बाध्य होगी किसी ऑब्जेक्ट के लिए - किसी ऑब्जेक्ट के माता-पिता के लिए बाध्यकारी 'कम से कम आश्चर्य के सिद्धांत' का उल्लंघन करेगा (मुझे लगता है ...) –

संबंधित मुद्दे

 संबंधित मुद्दे