2012-04-24 75 views
23

我有一個類似的問題,如發佈here,而不是獲得父ID,如何獲得腳本父級的引用,而不必編碼腳本標記的ID?獲取參考<script>父元素

例如,我有以下的代碼注入到一個網站:

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

我需要的是,在我的path_to_my_script.js文件,我可以去外div的參考。

有一個問題,就是將代碼複製粘貼到同一個網頁的多個位置,這會使標識符無用。

有沒有機會做到這一點,而無需在整個代碼中編碼一個ID?

如果解決方案是使用jQuery的更好:提前d

感謝。

+0

請提供更多信息/代碼 – Esailija 2012-04-24 14:20:22

+1

你要避免使用script標籤ID,以確保舊的瀏覽器不要」爆炸?還是有另一個原因? – hradac 2012-04-24 14:21:09

+0

@Esailija:我更新了帖子,希望它能幫助你,幫助我:D – diosney 2012-04-24 14:25:49

回答

38

What is the current element in Javascript?提到的,當前的<script>元件也是最後<script>元件,在執行的時間。

答案也適用於您的情況,因爲外部腳本的加載不會延遲(通過asyncdefer屬性)。

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 2012-04-25 15:15:16

+2

我多麼希望這是解決我問題的方法。事實是,我的應用程序做了很多JavaScript的動態加載,但是'document.scripts'數組只包含實際上在html本身中的第一個也是唯一的javascript文件。所有後來加載的js文件根本就不存在... – RemyNL 2017-01-30 13:36:22

1

您需要一種方法來引用您的腳本。你還期望知道你想要哪個腳本?如果你只有一個劇本,你總是可以做

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

拿到第一個腳本的DOM元素在網頁上。或者你可以使用jQuery和循環通過你的腳本,做一些與每個:

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

您可以使用屬性選擇得到一個腳本與特定src,然後parent('div')跳轉到它包含div元素。

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

謝謝你的回答。對於在頁面中複製和粘貼的所有代碼,腳本來源屬性都相同。查看對hradac的評論。我會更新這個問題來指出這一點。無論如何感謝您的時間。 – diosney 2012-04-24 14:32:48

+0

好吧,顯然你不會在單個頁面中多次加載相同的腳本,所以你可以簡單地將腳本的路徑名動態地構建到一個變量中,並立即將它注入到選擇器字符串中。 – Aaron 2012-04-24 14:36:20