jQuery

2008-12-12 18 views
5

के लिए एक DOM एलीमेंट का डेटा संबद्ध कर रहा है एक पिछले जीवन में, मैं कुछ इस तरह किया है हो सकता है:jQuery

<a href="#" onclick="f(311);return false;">Click</a><br/> 
<a href="#" onclick="f(412);return false;">Click</a><br/> 
<a href="#" onclick="f(583);return false;">Click</a><br/> 
<a href="#" onclick="f(624);return false;">Click</a><br/> 
अब jQuery के साथ

, मैं कुछ इस तरह कर सकते हैं: सिवाय

<a class="clicker" alt="311">Click</a><br/> 
<a class="clicker" alt="412">Click</a><br/> 
<a class="clicker" alt="583">Click</a><br/> 
<a class="clicker" alt="624">Click</a><br/> 

<script language="javascript" type="text/javascript"> 
    $(".clicker").bind("click", function(e) { 
     e.preventDefault(); 
     f($(this).attr("alt")); 
    }); 
</script> 

कि डीओएम से jQuery तक डेटा पास करने के लिए alt विशेषता का उपयोग करना एक हैक जैसा लगता है, क्योंकि यह इसका इच्छित उद्देश्य नहीं है। JQuery के उपयोग के लिए DOM में डेटा संग्रहीत/छिपाने के लिए यहां सबसे अच्छा अभ्यास क्या है?

उत्तर

3

JQuery.data आपको एक शब्दकोश को एक DOM तत्व से जोड़ने देता है। इस डेटा jQuery के माध्यम से स्थापित किया जा सकता:

<a class="clicker">Click</a><br/> 
<a class="clicker">Click</a><br/> 
<a class="clicker">Click</a><br/> 
<a class="clicker">Click</a><br/> 

<script language="javascript" type="text/javascript"> 
    var values = new Array("311", "412", "583", "624"); 
    $(".clicker").each(function(i, e) { 
     $(this).data('value', values[i]).click(function(e) { 
     f($(this).data('value')); 
     }); 
    }); 
</script> 

या HTML5 data- attributes, जो गैर एचटीएमएल 5 के दस्तावेजों में भी काम का उपयोग कर (jQuery 1.4.3 के बाद से):

<a class="clicker" data-value="311">Click</a><br/> 
<a class="clicker" data-value="412">Click</a><br/> 
<a class="clicker" data-value="583">Click</a><br/> 
<a class="clicker" data-value="624">Click</a><br/> 

<script language="javascript" type="text/javascript"> 
    $(".clicker").click(function(e) { 
     f($(this).data('value')); 
    }); 
</script> 
+0

यह मेरे लिए नाजुक दिखता है। आप दो अलग-अलग संग्रहों के बीच क्रम में एक मनमाने ढंग से सुसंगतता के आधार पर हैं - एक डेटा, एक मार्कअप। मैं इस मामले में इसका उपयोग नहीं देख सकता। – tvanfosson

+0

सहमत हुए। अगर मैं इस मार्ग में जारी रखने जा रहा हूं, तो मेटाडाटा प्लगइन जाने का रास्ता प्रतीत होता है। – Soldarnal

+0

आप इस उदाहरण में मामलों का आदेश दे रहे हैं? सभी लिंक एक ही हैं! * कैसे * आप डेटा सेट करते हैं, प्रश्न के लिए वास्तव में प्रासंगिक नहीं है, आईएमओ। आपको जवाब देने के लिए कुछ और संदर्भ की आवश्यकता होगी - लिंक उत्पन्न किए गए हैं, जहां से डेटा उत्पन्न होता है, उन्हें वास्तव में इंगित करता है, क्या वे वास्तव में कहीं इंगित करते हैं, आदि –

4

आप "क्लिकर-123" जैसी आईडी विशेषता का उपयोग कर सकते हैं और फिर नंबर को पार्स कर सकते हैं। मैं आमतौर पर ऐसा करता हूं या 'रिलायंस' विशेषता का उपयोग करता हूं।

तो, संक्षेप में, ऐसा करने का कोई बेहतर तरीका नहीं है जिसे मैं जानता हूं। मुझे उम्मीद है कि यह धागा मुझे गलत साबित करता है।

+0

सादगी के लिए, और गैर HTML5 दस्तावेज़ों की स्थिति में, यह वास्तव में चयनित एक से बेहतर जवाब है। मेरा वोट मिला! – designermonkey

1

मैं माफी चाहता हूँ, लेकिन अगर आप पहले से ही alt टैग भर रहे हैं, मैं यह देखने में असफल रहा कि ऑनक्लिक हैंडलर के असाइनमेंट में देरी करने में देरी से वास्तव में आपको कुछ भी खरीदता है। क्या यह सिर्फ एक मामला नहीं है "अब मेरे पास हथौड़ा है, हर समस्या एक नाखून की तरह दिखती है।" मुझे लगता है कि जब jQuery सामग्री को स्वाभाविक रूप से सामग्री से प्राप्त किया जा सकता है, उदाहरण के लिए, कक्षा परिभाषा, टैग प्रकार, आदि

+0

इस मामले में मेरा क्लिकर एक यूआई मोडल संवाद खोलता है। ऑनक्लिक असाइनमेंट कब निष्पादित करता है? यदि jQuery तैयार होने से पहले, तो संवाद तैयार होने से पहले चल सकता है; अगर बाद में, तो मैं इसे बिल्कुल देरी नहीं कर रहा हूं। – Soldarnal

4

आप एक नई सुविधा का सबसे अच्छा उपयोग करेंगे, तो jquery विधि का सबसे अच्छा उपयोग किया जाता है। एचटीएमएल 5: data-...-सामग्री।

अपने HTML- कोड इस तरह दिखेगा:

<a class="clicker" data-mynumber="311">Click</a> 

तो फिर तुम el.attr('data-mynumber') का उपयोग डेटा प्राप्त कर सकते हैं।

संख्या के बजाय, आप कोई भी नाम चुन सकते हैं।

यह सभी ब्राउज़रों में काम करता है।

+2

एचटीएमएल 5 डेटा विशेषताओं तक पहुंचने के लिए एक अच्छा jQuery सहायक है: $ (एल) .डेटा ('mynumber'); – Gazza