मूल प्रश्न सामग्री/उद्देश्य के बारे में बहुत विशिष्ट नहीं है और आईएमओ के आधार पर भिन्नता होनी चाहिए। मैं निश्चित रूप से एक बिंदु पर वर्तमान स्वीकृत उत्तर से असहमत हूं। एचटीएमएल के एक टन में नई आईडी को लूप करना और संलग्न करना जो पहले से ही प्रस्तुत किया गया है, बड़ी मात्रा में रिफ्लो गणना का कारण बन सकता है जो कि 'सामग्री कंटेनर' का प्रतिनिधित्व करता है, इसके आधार पर बदसूरत हो सकता है। सर्वर से आईडी के साथ
बिल्ड पहले या क्लाइंट-साइड पर एकल ब्लॉक के रूप में सम्मिलित करें, तो आपको अवश्य
एक सामान्य नियम के रूप में, बार-बार परिवर्तन के साथ डोम मार अगर आप इसे से बचने कर सकते से बचें। सर्वर पर पहले से बनाए गए आईडी बहुत नगण्य हैं जहां तक ब्राउज़र पृष्ठ को लोड करता है, आईएमओ। निश्चित रूप से, यह एक बड़ा, और इसके परिणामस्वरूप धीमी हैश-टेबल है, लेकिन अगर हम सैकड़ों बात कर रहे हैं और हजारों नहीं हैं तो मुझे गंभीरता से संदेह है कि आप नोटिस करने जा रहे हैं।
डेटा से निर्मित एक चयन सूची जैसे कुछ के मामले में एक अधिक कुशल क्लाइंट-साइड दृष्टिकोण आईडी और सभी के साथ पहले स्ट्रिंग के रूप में बनाना होगा, और उसके बाद किसी कंटेनर के आंतरिक HTML को असाइन करना होगा या अगर कुछ मेरे जेएस चैट सहकर्मियों, आपके पास हर संभव उपयोग-मामले में आंतरिक HTML के बारे में एक विचित्र हैग-अप है, भले ही यह अब spec में है, कम से कम एक दस्तावेज़ खंड में निर्माण और संलग्न करें। और उसके बाद अपने कंटेनर में संलग्न करें।
डेटा-गुण या वर्ग आईडी
IMO में, गंध-कारक नहीं प्रदर्शन बल्कि एचटीएमएल ब्लोट और एक आईडी निर्भरता जहां कोई भी जरूरत है बनाने, जिससे कुछ और है कि हो सकता है अवरुद्ध करने के बारे इतना है अपने एकल-आइटम divs में से एक पर एक कस्टम आईडी उपयोगी पाएं। आईडी निश्चित रूप से जावास्क्रिप्ट में एक तत्व लुक-अप को कम करने का आदर्श तरीका है, लेकिन सामग्री वाले कंटेनरों के मामलों में आपको प्रत्येक बच्चे की वस्तु को पहचानने से आईडीड कंटेनरों से अधिक लचीलापन मिल जाएगा। वन-स्टेपिंग बनाम दो-स्टेपिंग का प्रदर्शन लाभ तत्वों को जेनेरिक आईडी लागू करने की लचीलापन लागत के लायक नहीं है।
एक विकल्प के रूप में आप अद्वितीय मूल्यों या डेटा विशेषता वाले वर्गों का उपयोग कर सकते हैं, उदा। 'डेटा-Itemid = "0"'। एचटीएमएल के छोटे सेटों के लिए एक कस्टम चयन सूची की तरह जहां आईडी को डेटा अपडेट करने में आसानी के लिए कुछ सर्वर-साइड इंडेक्सिंग सिस्टम से कनेक्ट किया जाता है, मैं इस अत्यधिक दृश्यमान दृष्टिकोण का पक्ष लेता हूं क्योंकि यह आर्किटेक्चर को समझना आसान बनाता है, लेकिन यह बहुत कुछ जोड़ता है परिदृश्यों में ट्रैक करने के लिए अनावश्यक विशेषताओं की जहां सैकड़ों से हजारों आइटम शामिल हो सकते हैं।
या आदर्श रूप में (अधिकांश मामलों में), घटना प्रतिनिधिमंडल
सबसे आदर्श, IMO, आप अतिरिक्त विशेषताओं को पूरी तरह से ऐसे मामलों में जहां आप केवल बच्चे एकल आइटम तत्व आप क्लिक कर रहे हैं और क्या नहीं के बारे में परवाह बचने यह 'आईडी' या ऑर्डर है कि उन सिंगल-आइटम कंटेनर स्थिर रहेंगे और आप सुरक्षित रूप से मान सकते हैं कि पद प्रभावी आईडी हैं। या एक और परिदृश्य जहां यह एक गैर स्थैतिक सिंगल-आइटम सेट के साथ काम कर सकता है, यदि आपके पास ऑब्जेक्ट्स की एक सरणी में सिंगल-आइटम डेटा है जो शफल हो जाता है और फिर उपयोगकर्ता द्वारा शुरू किए गए प्रकारों पर HTML बनाने और बदलने के लिए उपयोग किया जाता है अन्य डेटा-ट्रैकिंग निर्भरताओं के लिए HTML का टाई ऑर्डर करें।
गैर Jquery दृष्टिकोण (untested):
var myContainer = document.getElementById('stuffContainer');
//ignore following indent goof
myContainer.addEventListener('click', function(e){
var
singleItem,
elementOriginallyClicked = singleItem = e.target,
stuffContainer = this;
//anything clicked inside myContainer will trigger a click event on myContainer
//the original element clicked is e.target
//google 'event bubbling javascript' or 'event delegation javascript' for more info
//climb parentNodes until we get to a single-item node
//unless it's already single-item that was originally clicked
while(!singleItem.className.match(/[=\s'"]single-item[\s'"]/g)){
singleItem = singleItem.parentNode;
}
//You now have a reference to the element you care about
//If you want the index:
//Get the singleItem's parent's childNodes collection and convert to array
//then use indexOf (MDN has normalizer for IE<=8) to get the index of the single-item
var childArray = Array.prototype.slice.apply(stuffContainer.childNodes,[0]),
thisIndex = childArray.indexOf(singleItem);
doSomethingWithIndex(thisIndex);
//or
//doSomethingWithDOMObject(singleItem);
});
या सरल JQuery प्रतिनिधिमंडल शैली (भी, untested):
$('#someContainer').on('click','.single-item', function(){
var $_singleItem = $(this), //jq handles the bubble to the interesting node for you
thisIndex = $_singleItem.index(); //also getting index relative to parent
doSomethingWithIndex(thisIndex);
//or
//doSomethingWithJQObject($_thisItem);
});
यदि वास्तव में बोनस अंक दे सकते हैं, yopu लगते टाइम्स ऑफ इंडिया बहुत सारे है। बस एक बक्षीस सेट करें ;-) – Pevara
मैंने [एक साधारण जेएसपीआरएफ परीक्षण] बनाया है (http://jsperf.com/html-dom-id-vs-no-id) और मुझे बहुत मिश्रित परिणाम मिलते हैं (परीक्षण अच्छा नहीं हो सकता है हालांकि), अलग-अलग विंडो में एक ही ब्राउज़र (क्रोम) में भी। HTML को पार्स करने में अधिकांश समय लग सकता है, इसलिए [यहां एक संस्करण है] (http://jsperf.com/html-dom-id-vs-no-id/2) प्रत्येक तत्व में गुणों की संख्या समान थी, लेकिन एक ही मिश्रित परिणाम। मुझे लगता है कि प्रदर्शन के अनुसार (इंडेक्स बनाने की तरह) यह वास्तव में कोई फर्क नहीं पड़ता है। –
@ फ़ेलिक्सक्लिंग दिलचस्प, परीक्षणों को एक साथ रखने के लिए धन्यवाद; मेरे अंत में (क्रोम 20 और फ़ायरफ़ॉक्स 14) ऐसा लगता है कि कोई आईडी संस्करण थोड़ा (बहुत थोड़ा) तेज नहीं है। – Mahn