2009-05-19 12 views
17

के लिए अद्वितीय पहचानकर्ता क्या है I जावास्क्रिप्ट डॉम का उपयोग कर एक HTML दस्तावेज़ को पार कर रहा हूं। मैं सभी नोड्स/तत्वों और उनके मूल्यों की एक सूची (वास्तव में एक सरणी) बनाना चाहता हूं। मुझे DOM ट्रैवर्स करने के लिए एक स्क्रिप्ट मिली, लेकिन मैं प्रत्येक नोड मान को सरणी में कैसे स्टोर करूं? मुझे नोड के लिए अद्वितीय पहचानकर्ता नहीं मिल रहा है। किसी के पास कोई संकेतक है? मैं xpath या कुछ के बारे में सोच रहा था।डीओएम तत्व/नोड

क्या अद्वितीय पहचानकर्ता के रूप में नोड के लिए xpath पर विचार करना एक अच्छा विचार है। यदि ऐसा है तो मैं DOM को घुमाने के दौरान तत्व के xpath कैसे प्राप्त करूं?

+1

आप पर विचार किया है कि सभी तत्वों और मानों की सूची * * डोम है? – annakata

+0

आपके पास सरणी में तत्व होने के बाद, आपकी योजनाएं क्या हैं? यदि यह सरणी को पार करना है तो बस डीओएम को पार करना आसान होगा। आपकी टिप्पणियों के लिए –

उत्तर

19

प्रोग्रामर के रूप में सी और सी ++ की दुनिया में पैदा हुआ और लाया गया, इस तरह के प्रश्न का मेरा पहला जवाब "उनके पते को सरणी में स्टोर करें" होगा। लेकिन चीजों के वेब तरीके से घूमने के कुछ सालों बाद, मैं सही उत्तर दे सकता हूं:

जावास्क्रिप्ट में, आप सीधे संदर्भ सरणी में ऑब्जेक्ट्स को स्टोर कर सकते हैं। और नहीं, xpath इसके लिए एक अच्छा विचार नहीं है; संदर्भों का उपयोग करना सरल और बेहतर है। तो आपके प्रश्न का सीधा जवाब यह है: को छोड़कर डीओएम तत्व/नोड के लिए कोई अद्वितीय पहचानकर्ता नहीं है

जावास्क्रिप्ट में, सभी ऑब्जेक्ट संदर्भ के आधार पर पारित किए जाते हैं। तो यहां एक नमूना कोड है कि इसे कैसे करें:

var theArray = []; 
var theNodeToTraverse = document.getElementById('domelementtosearch'); 

traverseAndStore(theNodeToTraverse); 

function traverseAndStore(node) 
{ 
    if(node==null) return; 
    theArray[ theArray.length ] = node; 
    for(i=0; i<node.childNodes.length; i++) 
     traverseAndStore(node.childNodes[i]); 
} 
+0

हे thnx! – Annibigi

+0

यह कोड क्या करता है? – KJW

+0

यह कोड बस 'theNodeToTraverse' के सभी बच्चों को पार करता है, और 'theArray' में बच्चे DOM तत्वों के संदर्भों को संग्रहीत करता है। – jrharshath

0

आप इस तरह से कुछ के साथ xpath के समान कुछ प्राप्त कर सकते हैं। यह पैरेंट नोड संपत्ति के माध्यम से इनपुट तत्व से ऊपर डोम को पार करता है।

https://gist.github.com/sebjwallace/3c0a6f7493ce23134516

यह उत्पादन इस तरह एक स्ट्रिंग होगा।

"# दस्तावेज़/HTML/शरीर/div"

var getElementPath = function(el){ 
    var path = el.nodeName; 
    var parent = el.parentNode; 
    while(parent){ 
    path = parent.nodeName + '/' + path; 
    parent = parent.parentNode; 
    } 
    return path; 
} 
+5

एक अद्वितीय आईडी के प्रयोजनों के लिए, यह असफल हो जाएगा यदि दो डीआईवी थे जो बॉडी तत्व के बच्चे थे, क्योंकि दोनों के पास समान आउटपुट स्ट्रिंग होगी। यह एक आईडी के रूप में इसकी विशिष्टता को अमान्य कर देगा। –

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