为什么html()执行JavaScript,但innerHTML不执行?

时间:2014-02-12 17:02:44

标签: javascript jquery innerhtml

为什么执行<script>

$('#jq_script').html("<script>$('#test').text('test');<\/script>");

但这不是吗?

document.getElementById('js_script').innerHTML = "<script>$('#test').text('test');<\/script>";

您可以在行动中看到它 here

来自jQuery的关于.html()的文档:

  

此方法使用浏览器的innerHTML属性。某些浏览器可能不会返回完全复制原始文档中HTML源的HTML。例如,如果属性值仅包含字母数字字符,则Internet Explorer有时会忽略引号。

1 个答案:

答案 0 :(得分:9)

html是一个jQuery函数。 innerHTML是非标准(但受到良好支持)的属性。

如果查看代码,您会看到.html()解析脚本,eval解析脚本。


要在源中找到它:

查找html声明:https://github.com/jquery/jquery/blob/1.11.0/src/manipulation.js#L564-604

看到.appendappend依次调用DomManip[ulate]来解析和eval脚本。

DomManip[ulate]中的相关位:https://github.com/jquery/jquery/blob/1.11.0/src/manipulation.js#L684-709