为什么';jQuery&x27;s$.get()是否将脚本元素插入DOM?
我正在使用为什么';jQuery&x27;s$.get()是否将脚本元素插入DOM?,jquery,Jquery,我正在使用$.get()从远程服务器检索HTML片段,并将该片段插入DOM。该代码段包含几个基本HTML元素和一个脚本元素。所有基本元素都会被插入,但脚本元素不会 示例代码片段: <p>This is a paragraph</p> <script type="text/javascript"> // JavaScript that will work with the HTML in the snippet </script> 这是一段 //将
$.get()
从远程服务器检索HTML片段,并将该片段插入DOM。该代码段包含几个基本HTML元素和一个脚本元素。所有基本元素都会被插入,但脚本元素不会
示例代码片段:
<p>This is a paragraph</p>
<script type="text/javascript">
// JavaScript that will work with the HTML in the snippet
</script>
这是一段
//将与代码段中的HTML一起使用的JavaScript
通过查看在Chrome的web inspector中检索到的资源,我已经验证了脚本元素是否在检索到的代码段中。那么,为什么$.get()
不插入script元素,是否可以执行我想要执行的操作
编辑:
<p>This is a paragraph</p>
<script type="text/javascript">
// JavaScript that will work with the HTML in the snippet
</script>
为了澄清,我使用
$.get()
检索HTML片段,并使用$()将其插入DOM。HTML(数据)
应该插入脚本元素,就像插入静态内容一样-脚本不会执行。使用html()插入html时,它将映射到每个元素的innerHTML属性。历史上,浏览器不会执行以这种方式插入的脚本元素(IE除外)
这也反映在HTML 5规范草案中:
注意:使用innerHTML插入的脚本元素在插入时不会执行
如果要执行脚本,可以查找元素并评估其文本,或者从文本创建新的脚本元素并将其正确插入DOM。执行此操作时,脚本元素不会绑定到文档。 您需要自己插入脚本 一种方法是调用回调函数,解析返回的html并手动插入脚本。像这个: `
\u插入脚本:函数(html){
var sfrag=']*>([\\S\\S]*?);
var matchAll=newregexp(sfrag,'img');
var matchOne=新的RegExp(sfrag,'im');
if(html.match(matchAll)){
$.map(html.match(matchAll)、函数(脚本){
eval((script.match(matchOne)| |['',])[1]);
});
}
}
`
我也见过一些使用jQuery中live()函数的解决方案,但我不确定它是如何工作的。为什么需要script元素?通常您只需要执行它,您的情况是否有所不同?脚本包含用于处理代码段中包含的表单元素的函数。这些函数将绑定到诸如选择更改值和提交的表单之类的对象。所有这些都不会发生。