防止jQuery()执行javascript

时间:2011-08-24 20:19:24

标签: javascript jquery

我正在研究一些使用jQuery从Web上解析html文档中的数据的代码。之所以做出这个决定是因为jQuery具有在页面上选择对象的强大功能,因此非常适合解析。

代码就像这样(其中'html_string'是整个网页的html):

var page = $(html_string);

我遇到的问题是javascript也在html_string中进行评估和执行。这导致形成新线程,在某些情况下,包含无限循环,这些循环会向服务器发出重复请求,并最终导致应用程序的整个客户端(而不是服务器)崩溃。

有没有办法以某种方式阻止在这种情况下执行javascript。在这种情况下,执行javascript是一种不必要的副作用。

非常感谢!

4 个答案:

答案 0 :(得分:2)

这是一个糟糕的小jsfiddle,它显示当你将html_string加载到$时js不会运行。单击“运行”后,您将看到“wtf”的即时警报。三秒钟后,html被加载到$并且正文更新为'moo',你不应该看到警报。

http://jsfiddle.net/9BAkE/

答案 1 :(得分:1)

一种方法是在用jQuery包装之前解析html字符串。

类似的东西:

var page = html_string;


//then find the script tag (untested code)
int beginning_of_script = page.indexOf('<script>');
int end_of_script = page.indexOf('</script>');

// remove the script
page = page.remove(beginning_of_script, end_of_script);

答案 2 :(得分:1)

您最初可以将此语法作为注释

加载到浏览器中
<script>
/* var page = $(html_string); */
</script>

然后提取评论的内容。这里的优点是浏览器不会解析并在页面加载时执行注释。

您还可以使用jQuery的.load()函数进行探索,不确定它是否符合您的需求。

答案 3 :(得分:1)

如果你不在乎有一个额外的元素,请检查一下! http://jsfiddle.net/UbCFc/4/