2012-05-23 20 views
0

我不確定問題的標題是否正確,以及問題的有效性。jQuery獲取調用腳本標記的引用

下面是場景:

// HTML

<script src="/script.js" data-app="app.js" /> 

//的script.js

$(function() { 

    var script = // ??? 

}); 

裏面的js代碼,我想引用原始標籤,一誰初始化加載「/script.js」,所以我能夠檢查data-app屬性。

這可能嗎?

+0

的[我怎麼可能會引用加載當前正在執行腳本的腳本標籤?]可能重複(HTTP:/ /stackoverflow.com/questions/403967/how-may-i-reference-the-script-tag-that-loaded-the-currently-executing-script) – ThiefMaster

+0

在chrome和IE上有一個document.scripts屬性(長時間),我不知道它的標準(我不這麼認爲)以及哪些瀏覽器支持它,但是如果它的調試目的和控制瀏覽器版本,那麼它可以使用它而不是波紋管建議$(「。 ..「)jquery stuff –

回答

3
$('script').last().data('app'); 

注意,這可能是在DOM準備塊。您可以訪問當前腳本標籤的唯一地方是它第一次執行的時間。異步回調(如DOM就緒事件)不符合此要求。你可以簡單地存儲在一個變量的值,雖然,然後用它從你的事件中:

(function() { 
    var app = $('script').last().data('app'); 
    $(document).ready(function() { 
     // do stuff 
    }); 
})(); 
3

您可以枚舉document.scripts中的腳本並使用其src屬性識別您的腳本。

1

我不認爲有一個「正確」的方式,讓您的標籤。但理論上講,當你的腳本運行相應的標籤時,應該是插入到文檔中的最後一個。所以把這樣的代碼爲script.js作品:

var child = document; 
while (child && child.localName != "script") 
    child = child.lastChild; 

if (child) 
    alert("My script tag: " + child); 

您將需要運行該代碼時,腳本加載並記住腳本標籤,如果你在初始加載後需要它。

+0

爲什麼不'getElementsByTagName('script')'? – ThiefMaster

+0

@ThiefMaster:性能 - 如果可以直接訪問該文檔中最後一個元素,爲什麼要枚舉可能非常大的文檔中的所有腳本。 –

1
document.scripts[document.scripts.length-1].src 

我不知道是什麼瀏覽器支持它(IE和Chrome,是)

+0

我認爲所有的瀏覽器都支持'document.scripts',但它是一個向後兼容的屬性,在現代瀏覽器中它和document.getElementsByTagName(「script」)'完全一樣。 –

+0

以及最後會遍歷DOM ..但是我想同樣的結果 –

+0

就像'document.scripts'一樣。 –