簡體   English   中英

如何動態插入<script> tag via jQuery after page load?

[英]How to dynamically insert a <script> tag via jQuery after page load?

我在使它工作時遇到問題。 我首先嘗試將腳本標簽設置為字符串,然后在頁面加載后使用jquery replaceWith()將它們添加到文檔中:

var a = '<script type="text/javascript">some script here</script>';
$('#someelement').replaceWith(a);

但是我在那個變量上有字符串文字錯誤。 然后,我嘗試將字符串編碼為:

var a = '&left;script type="text/javascript"&gt;some script here&lt;\/script&gt;';

但將其發送到replaceWith()只會將該字符串輸出到瀏覽器。

有人可以讓我知道您如何在頁面加載后(最好是通過jQuery)將<script>標記動態添加到瀏覽器中嗎?

您可以將腳本放入單獨的文件中,然后使用$.getScript加載並運行它。

例:

$.getScript("test.js", function(){
    alert("Running test.js");
});

請嘗試以下操作:

<script type="text/javascript">
// Use any event to append the code
$(document).ready(function() 
{
    var s = document.createElement("script");
    s.type = "text/javascript";
    s.src = "http://scriptlocation/das.js";
    // Use any selector
    $("head").append(s);
});

http://api.jquery.com/append

這是使用現代(2014)JQuery的正確方法:

$(function () {
  $('<script>')
    .attr('type', 'text/javascript')
    .text('some script here')
    .appendTo('head');
})

或者,如果您確實要替換div,則可以執行以下操作:

$(function () {
  $('<script>')
    .attr('type', 'text/javascript')
    .text('some script here')
    .replaceAll('#someelement');
});

一個更簡單的方法是:

$('head').append('<script type="text/javascript" src="your.js"></script>');

您也可以使用此表單加載CSS。

從技術上講,該答案與jcoffland的答案相似或相等。 我只是添加了一個查詢來檢測腳本是否已經存在。 我之所以需要它,是因為我在一個Intranet網站上工作,其中包含兩個模塊,其中一些模塊共享腳本或自帶腳本,但是這些腳本不需要每次都重新加載。 我在生產環境中使用該代碼段已有一年多了,它的工作原理像個煙斗。 對自己說:是的,我知道,問一個函數是否存在會更正確... :-)

if (!$('head > script[src="js/jquery.searchable.min.js"]').length) {
    $('head').append($('<script />').attr('src','js/jquery.searchable.min.js'));
}

有一種解決方法聽起來更像是一種破解,我同意這不是最優雅的方法,但可以100%起作用:

說您的AJAX響應類似於

<b>some html</b>
<script>alert("and some javscript")

請注意,我故意跳過了結束標記。 然后在加載上述內容的腳本中,執行以下操作:

$.ajax({
    url: "path/to/return/the-above-js+html.php",
    success: function(newhtml){
        newhtml += "<";
        newhtml += "/script>";
        $("head").append(newhtml);
    }
});

只是不要問我為什么:-)這是我經過絕望的幾乎隨機試驗而失敗的結果之一。

我沒有關於它如何工作的完整建議,但有趣的是,如果將結束標記添加到一行中,它將不起作用。

在這樣的時代,我覺得自己已經成功地除以零。

例:

var a = '<script type="text/javascript">some script here</script>';
$('#someelement').replaceWith(a);

它應該工作。 我嘗試過這個; 同樣的結果。 但是當我使用這個:

var length = 1;
var html = "";
for (var i = 0; i < length; i++) {
    html += '<div id="codeSnippet"></div>';
    html += '<script type="text/javascript">';
    html += 'your script here';
    html += '</script>';
}
$('#someElement').replaceWith(a);

這對我有用。

編輯:我忘記了#someelement (順便說一句,由於約定我可能要使用#someElement

這里最重要的是+ =,因此html被添加而不是被替換。

如果它不起作用,請發表評論。 我想幫你!

這是一種更清晰的方法-無需jQuery-將腳本添加為<body>的最后一個子代:

document.body.innerHTML +='<script src="mycdn.js"><\/script>'

但是,如果要添加加載腳本,請使用Rocket Hazmat的方法

如果您嘗試運行一些動態生成的JavaScript,那么使用eval會更好一些。 但是,JavaScript是一種動態語言,因此您實際上不需要它。

如果腳本是靜態的,那么應該使用Rocket的getScript -uggesttion。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM