我有一個JavaScript函數我正在寫哪個被用來包含外部JS文件,但只有一次。我需要這樣一個函數的原因是因爲當通過AJAX加載某些內容時它被調用,並且我需要爲該內容運行頁面特定的代碼(不,只是使用.live
不會覆蓋它)。動態地包含javascript文件只有一次
這裏是我的嘗試,縮短爲簡潔:
$.include_once = function(filename) {
if ($("script[src='" + filename + "']").length === 0) {
var $node = $("<script></script>")
.attr({
src : filename,
type : "text/javascript"
})
;
$(document.body).append($node);
}
};
這工作正常:函數被調用時,它加載外部文件,以及加載時該文件正在運行。完善。
問題是,它將始終重新加載該外部文件:我用來檢查腳本的存在的查詢總是找不到任何東西!
當調試這一點,我添加了一些行:
alert($("script").length); // alerts: 4
$(document.body).append($node);
alert($("script").length); // alerts: 4
展望動態源(螢火蟲的HTML標籤),我無法找到腳本標籤都沒有。
我知道我可以維護一個以前包含的文件數組,但我希望能夠使用像這樣的方法(如果它工作的話),看起來更健壯一些,因爲不是全部JS文件正在以這種方式被包含。
任何人都可以解釋在這第二個片段中看到的行爲?
優秀的迴應。我認爲jQuery本身或某事太聰明瞭。 – nickf 2009-12-10 03:21:50
@nickf:我對jQuery的大部分內容都有這種感覺(太聰明瞭);我猜想有很多必要的惡意。 – 2009-12-10 03:27:34