2010-09-29 23 views
0

說我有一個是這樣的:有沒有辦法從html內容中提取有效的腳本並使用jQuery執行它?

<p id="script">$("p").css("color", "red");</p> 

有沒有一種方法來選擇包含在標籤內的腳本,並使用jQuery執行嗎?在這種情況下,腳本

$("p").css("color", "red"); 

將被執行,然後使其自身在段落標記內以紅色字體顏色呈現。我可以很好地選擇文本,但還沒有找到實際執行它的方法。我不想要其他解決方案 - 我知道他們,我只是想弄清楚這個具體情況是否可能,如果是的話,如何。謝謝。

回答

4
eval($("#script").text()) 

由於它採用text(),應該去掉任何HTML,所以你應該可以,如果你想給任何代碼熒光筆申請代碼。

例如,如果你使用的StackOverflow代碼熒光筆,想要選擇的代碼,文本()將返回你所期望的:

eval($("#script").text()) 

html()可能會返回

<span class="kwd">eval</span><span class="pun">(</span><span class="pln">$</span><span class="pun">(</span><span class="str">"p #script"</span><span class="pun">).</span><span class="pln">text</span><span class="pun">())</span><span class="pln"><br></span> 

這顯然不能被評估。

如果你不打算做任何代碼突出顯示,那麼這是一個沒有問題。

+0

請記住這不是相同的結果,例如:http://jsfiddle.net/nick_craver/rBhJq/與http:// jsfiddle.net/nick_craver/rBhJq/1/取決於你之後的行爲......但在這種情況下,OP完全控制了標記,並且沒有使用突出顯示,因此無論如何,我認爲這是一個有爭議的問題。 – 2010-09-29 00:58:42

+0

你應該糾正你的選擇器,以便將來的用戶找到這個問題。 – 2010-09-29 01:20:39

+0

@Nick Craver:謝謝你指出。固定。 – 2010-09-29 01:25:52

1

你可以調用它eval(),但我會重新評估你的方法,像這樣:

eval($("#script").html()); 

You can test it out here。這只是說明可以做到,但是如果可能的話,您應該儘量避免這種情況,至少它有安全和性能問題。

+0

如果代碼碰巧有任何標記,這不會中斷嗎?例如,如果代碼突出顯示已應用於該代碼塊。 – 2010-09-29 00:34:01

+2

@Daniel - 如果除了代碼之外還有別的東西,那麼真的沒有什麼是安全的......並不是說開始時是安全的。 – 2010-09-29 00:34:52

+2

美女!我只是想澄清,這不是一個Web應用程序,只是我正在玩的東西,這正是我想要的,因爲我100%控制將在eval()內運行的內容。我永遠不會在野外使用它。謝謝! :-) – Aaron 2010-09-29 00:35:44

相關問題