【问题标题】:Why does html() execute JavaScript, but innerHTML doesn't?为什么 html() 执行 JavaScript,而 innerHTML 不执行?
【发布时间】:2014-03-11 04:06:47
【问题描述】:

为什么会执行<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 有时会省略它们的引号。

【问题讨论】:

  • 可能你打错了'#jq_script' | getElementById('js_script')
  • 因为 jQuery 开发人员对其进行了编码以使其工作。

标签: javascript jquery innerhtml


【解决方案1】:

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

如果您查看代码,您会看到 .html() 解析脚本,而 evals 解析它们。


在源代码中找到它:

找到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中的相关位

【讨论】:

猜你喜欢
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多