2012-04-24 6 views
23

पर एक संदर्भ प्राप्त करें मुझे here पोस्ट की गई एक ही समस्या है, लेकिन मूल आईडी प्राप्त करने के बजाय, मैं स्क्रिप्ट टैग के लिए आईडी को कोड किए बिना स्क्रिप्ट माता-पिता का संदर्भ कैसे प्राप्त कर सकता हूं?<script> पैरेंट तत्व

उदाहरण के लिए, मैं निम्नलिखित कोड एक वेबसाइट के लिए इंजेक्शन है

<div> 
    some other html tags 
    <script src="http://path_to_my_script.js"></script> 
</div> 

क्या मैं जरूरत है कि मेरे path_to_my_script.js फ़ाइल में मैं बाहरी div के लिए एक संदर्भ मिल सकता है।

एक पकड़ है और यह है कि कोड की प्रतिलिपि बनाई जाएगी & उसी वेबपृष्ठ में कई स्थानों पर चिपकाया गया है, जो एक पहचानकर्ता बेकार बनाता है।

पूरे कोड में आईडी को कोड किए बिना ऐसा करने का कोई मौका है?

समाधान jQuery के साथ बेहतर है: डी अग्रिम में

धन्यवाद।

+0

अधिक जानकारी प्रदान करें/कोड – Esailija

+1

आप स्क्रिप्ट टैग पर आईडी का उपयोग कर सुनिश्चित करें कि पुराने ब्राउज़र डॉन 'बनाने के लिए से बचने के लिए चाहते हैं टी उड़ाओ? या कोई और कारण है? – hradac

+0

@Esailija: मैंने पोस्ट अपडेट किया है, उम्मीद है कि यह मेरी मदद करने में आपकी सहायता करेगी: डी – diosney

उत्तर

38

What is the current element in Javascript? में उल्लेख किया है, वर्तमान <script> तत्व भी पिछले <script> तत्व, निष्पादन के समय में है।

उत्तर आपके मामले पर भी लागू होता है, क्योंकि बाहरी स्क्रिप्ट का भार स्थगित नहीं होता है (async या defer विशेषता के माध्यम से)।

var scriptTag = document.getElementsByTagName('script'); 
scriptTag = scriptTag[scriptTag.length - 1]; 
var parentTag = scriptTag.parentNode; 

अधिकतर ब्राउज़र (यहां तक ​​कि IE6) समर्थन document.scripts। Firefox संस्करण 9. तो की है, इस ऑब्जेक्ट का समर्थन करता है, तो निम्न कोड का भी इस्तेमाल किया जा सकता है:

var scriptTag = document.scripts[document.scripts.length - 1]; 
var parentTag = scriptTag.parentNode; 
+0

बहुत बढ़िया! धन्यवाद! – diosney

+2

मैं यह चाहता था कि यह मेरी समस्या का समाधान हो, यह नहीं था। तथ्य यह है कि मेरा एप्लिकेशन जावास्क्रिप्ट की बहुत गतिशील लोडिंग करता है लेकिन 'document.scripts' सरणी में केवल पहली और एकमात्र जावास्क्रिप्ट फ़ाइल होती है जो वास्तव में HTML में ही होती है। बाद में लोड की गई जेएस-फाइलें बस वहां नहीं हैं ... – RemyNL

1

आपको अपनी स्क्रिप्ट को संदर्भित करने का एक तरीका चाहिए। आप कैसे और स्क्रिप्ट जानना चाहते हैं कि आप कौन सी स्क्रिप्ट चाहते हैं? आप केवल एक स्क्रिप्ट है, तो आप हमेशा अपने पृष्ठ पर पहले स्क्रिप्ट का एक डोम तत्व प्राप्त करने के लिए

var myScript = document.getElementsByTagName("script")[0]; 

कर सकता है। या फिर आप एक दूसरे के साथ कुछ करने के लिए अपनी स्क्रिप्ट के माध्यम से jQuery और पाश इस्तेमाल कर सकते हैं:

$("script").each(function() { 
    alert($(this).html()); 
}); 
3

आप विशेषता चयनकर्ता, तो parent('div') अपने युक्त div तत्व के लिए कूद करने के लिए उपयोग एक विशिष्ट src साथ एक स्क्रिप्ट प्राप्त करने के लिए कर सकते हैं।

var parentDiv = $('script[src="path/to/script.js"]').parent('div'); 
+0

आपके उत्तरदाता के लिए धन्यवाद। पृष्ठ में कॉपी और पेस्ट किए गए सभी कोड के लिए स्क्रिप्ट स्रोत विशेषता समान है। Hradac को टिप्पणी देखें। मैं इस बिंदु को इंगित करने के लिए प्रश्न अपडेट करूंगा। वैसे भी आपके समय के लिए धन्यवाद। – diosney

+0

ठीक है, जाहिर है कि आप एक ही पृष्ठ में एक ही स्क्रिप्ट को कई बार लोड नहीं कर रहे हैं, इसलिए आप स्क्रिप्ट के पथनाम को गतिशील रूप से एक चर में बना सकते हैं और इसे तुरंत चयनकर्ता स्ट्रिंग में इंजेक्ट कर सकते हैं। – Aaron