2013-08-22 46 views
0

我的問題如下。 我有一個包含JavaScript代碼類型的text/plain的多個腳本塊。 所以我的問題是有沒有任何腳本,我可以動態地將它們從文本/純文本轉換爲文本/ JavaScript類型並執行其內容?我遇到的問題是執行的地方,因爲腳本包含document.write,所以輸出被附加在html的末尾,而不是腳本本身的位置。將塊從文本/純文本轉換爲文本/ javascript並執行它

例如:讓我們說這樣的事情

<script type="text/plain">alert('hello world');</script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    $("script[type*=plain]").each(function() { 
     $(this).attr('type','text/javascript'); 
    }); 
}); 
</script> 

日Thnx

+0

我創建了一個JS函數在每個文本/純腳本塊後調用。這是我想出的最簡單的解決方案。不是最優雅的,但仍然。 – swirm

回答

0

修改代替script元素不會導致它被執行。您需要使用適當的內容創建一個新的腳本元素。另一種選擇是舊元素來eval()內容:

$(document).ready(function(){ 
    $("script[type*=plain]").each(function() { 
     eval($(this).text()); 
    }); 
}); 
+0

我曾用document.createElement和replaceChild嘗試過,但問題是執行的地方。 – swirm

+0

你可以加入你對你的問題的嘗試,並做一個小提琴惡作劇嗎? – Barmar

0

你可以用一些討厭的方式去與類型=普通,然後訪問它的innerText屬性,將其分配給eval方法選擇的標籤。

var el = $("script[type*=plain]")[0]; 
eval(el.innerText); 

但我想嘗試avoid using eval

如果有一種不同的方法,我沒有意識到這一點,爲此我很抱歉。

0

您不能document.write將其放置在地方的<script>元素的輸出,如果你改變腳本的type,因爲整個頁面的JavaScript代碼woudn't重新運行每次添加新<script>或評估現有的時間。
如果你想用腳本執行的結果,以取代<script type="text/plain">,則可以從該腳本返回,而不是使用document.write一些字符串,然後插入該字符串代替<script type="text/plain">元素:

<script type="text/plain"> 
    var result = "line1<br>"; 
    result += "line2"; 
    alert('hello world'); 
    result 
</script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    $("script[type*=plain]").each(function() { 
    $(this).replaceWith(eval($(this).text())); 
    }); 
}); 
</script>