2010-09-29 21 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

相关问题