我想匹配Ajax下载文档中的任何原始脚本,所以我尝试了
$.ajax({
url: url,
type: "post",
success: function (data, status, xhr) {
var scr = $(data).find('script[type="text/javascript"]');
该呼叫正在返回成功,但选择器未返回匹配,即
'script[type="text/javascript"]'
的长度为0.
正在加载的页面(即data
)肯定包含一个测试脚本标记,如下所示:
<script type="text/javascript">
$(function () {
alert("JS running");
});
</script>
我在这里缺少什么?这是JQuery解析原始HTML的方式吗?
这也不会返回匹配项:
var scr = data.find('script');
注意:查看$(数据)的内容,看起来JQuery解析器会删除任何Javascript标记。
答案 0 :(得分:3)
你需要在这里使用正则表达式。
使用Javascript .match
。
此外,您比较script[type="text/javascript"]
的字符串与var:<script type="text/javascript">
中的字符串不同。
您应该像以下一样使用它:
matched = data.match('<script .*</script>');
它将具有匹配的内容。
答案 1 :(得分:0)
$(htmlstring)似乎从HTML中删除任何脚本标记。这太遗憾了。
我提出的解决方案基于How to get regex to match multiple script tags?
的答案中的正则表达式 var re = /<script\b[^>]*>([\s\S]*?)<\/script>/gm;
var scripts = "";
var match;
while (match = re.exec(data)) {
if (match[1] != "") {
scripts += match[0];
}
}
panel.append(scripts);
我连接任何内联脚本,脚本在附加到DOM后立即执行。