2010-06-02 14 views
22

मुझे यह जानने की जरूरत है कि वर्तमान निष्पादन नोड प्राप्त करना संभव है या नहीं?जावास्क्रिप्ट: वर्तमान निष्पादन <script> नोड प्राप्त करें?

उदाहरण:

..html 
<script id="x"> 
    console.log(document.currentNode.id); // << this must return "x" 
</script> 
..html 

धन्यवाद!

+1

तुम क्या प्रयोग करेंगे के लिए यह? –

+0

मैं डिफॉल्ट विज्ञापनों को लोड करने के लिए document.write को प्रतिस्थापित करने का प्रयास कर रहा हूं ... –

उत्तर

20

मुझे 100% निश्चित रूप से पता नहीं है, लेकिन document.getElementsByTagName('script') द्वारा लौटाए गए स्क्रिप्ट टैग का संग्रह वर्तमान में <script> निष्पादित करने वाले स्क्रिप्ट टैग शामिल नहीं होना चाहिए। दूसरे शब्दों में, मुझे लगता है कि यह काम करना चाहिए:

var arrScripts = document.getElementsByTagName('script'); 
var strScriptTagId = arrScripts[arrScripts.length - 1].id; 

यह केवल स्क्रिप्ट के रूप में पृष्ठ लोड को क्रियान्वित कर रहे हैं के लिए काम करेंगे। यदि यह किसी स्थगित स्क्रिप्ट में या पेज-लोड ईवेंट के हिस्से के रूप में निष्पादित होता है, तो यह संभवतः पूरी तरह से प्रस्तुत पृष्ठ में अंतिम <script> की रिपोर्ट करेगा। ध्यान दें कि आईडी टैग <script> के लिए मान्य विशेषता नहीं है, इसलिए आपका पृष्ठ मान्य नहीं होगा। यदि आपके पास कोई बाहरी स्क्रिप्ट है जो स्क्रिप्ट टैग लिखती है (उदाहरण के लिए, तृतीय पक्ष विज्ञापन), मुझे लगता है कि कोड अप्रत्याशित होगा। मैंने कुछ साल पहले इस विचार के साथ खेला और परिणाम असंतोषजनक थे।

+4

यह एसिंक स्क्रिप्ट के लिए काम नहीं करेगा। – unscriptable

+6

@ अनुसूचित जाति, हाँ।मैंने सोचा कि मैंने अपने जवाब में स्पष्ट रूप से समझाया है। नहीं? – Andrew

16

गीको (फ़ायरफ़ॉक्स) दस्तावेज़ ऑब्जेक्ट पर एक गैर मानक गुण का समर्थन करता है जो वर्तमान स्क्रिप्ट नोड को इंगित करता है। उपर्युक्त उत्तर के लिए जाने से पहले आप इसे देखना चाह सकते हैं।

https://developer.mozilla.org/en-US/docs/DOM/document.currentScript

<script id="x"> 
    console.log(document.currentScript.id); // << this must return "x" 
</script> 
+7

'document.currentScript' वास्तव में HTML5 का हिस्सा है: http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#dom-document-currentscript – scribu

+2

क्रोम इसका भी समर्थन करता है (चूंकि v.29) –

+0

अभी तक, यह सबसे अच्छा जवाब है –

0

का उपयोग क्यों नहीं:

<script id="x"> 
    console.log(document.getElementById("x").id); 
</script> 
+0

क्योंकि आपके पास आईडी नाम शुरू नहीं है - यह इंजेक्शन डीओएम सामग्री – Alex

3

एंड्रयूज जवाब पहले से ही एक अच्छा विचार किया गया है, लेकिन मैं सभी मुद्दों का उल्लेख किया का अनुभव किया। यही कारण है कि मैंने एक अलग दृष्टिकोण चुना जो आईई, एफएफ और क्रोम के लिए अच्छी तरह से काम करता है।

बस छवि के एक अधिभार ईवेंट में स्क्रिप्ट निष्पादित करना। एक पारदर्शी 1 पिक्सेल gif इनलाइन को परिभाषित करना और जब यह आग लगती है तो आपको "यह" प्राप्त होगा।

यह उदाहरण प्रतिपादन के दौरान गतिशील रूप से DIV सामग्री को बदलने के लिए उपयोग किया जाता है। मेरा लक्ष्य एक ब्राउज़र आधारित xsl प्रतिपादन द्वारा बनाए गए एक अलग आंतरिक HTML के साथ div को भरना है (यहां दिखाया नहीं गया है)।

निश्चित रूप से आप इंटरनेट से किसी भी छवि को लोड भी कर सकते हैं, इसलिए यह इनलाइन नहीं होना चाहिए। और बड़ा लाभ: छवि और इसकी घटना स्वयं को नई सामग्री के साथ बदल रही है, यहां तक ​​कि छवि गायब हो जाएगी। "Div" को किसी भी "आईडी" असाइनमेंट की आवश्यकता नहीं है।

<div id="demo"> 
empty 
    <img onLoad="changeNodeOnTheFly(this,'hurra');void(0);" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="/> 
</div> 

स्क्रिप्ट:

<script> 
function changeNodeOnTheFly(ele, text) 
{ 
ele.parentNode.innerHTML=text; 
} 
</script> 

बीआर Heiko

+0

के साथ काफी विशिष्ट समस्या है, इस समस्या को हल करने के लिए बहुत अच्छा और सुरक्षित तरीका ! – Alex

2

उपयोग document.write अपनी स्थिति को खोजने के लिए:

<script data-foo="bar"> 
    var id = 'placeholder-' + Math.floor(Math.random() * 1e10) 
    document.write('<div id=' + id + '></div>') 

    var placeholder = document.getElementById(id) 
    var script = placeholder.previousSibling 
    placeholder.parentNode.removeChild(placeholder) 

    // "bar" is written to the document 
    document.write(script.getAttribute('data-foo')) 
</script> 
संबंधित मुद्दे