Javascript 为什么脚本将使用jquery';s html,但不是使用innerHTML?

Javascript 为什么脚本将使用jquery';s html,但不是使用innerHTML?,javascript,jquery,html,innerhtml,Javascript,Jquery,Html,Innerhtml,所以我在这里有点困惑。我不明白为什么脚本在使用jquery的.html()而不是innerHTML时执行。我查看了jQuery的.html的源代码,似乎仍然在使用innerHTML。有人能解释这种行为吗 我在一次ajax响应中遇到了这个问题。我得到了html和一个script标记,其中包含一些javascript,我通常使用html,但出于某种原因,这次使用了innerHTML,认为没有区别 我知道这似乎是本地化的,所以我制作了一个带有超时的JSFIDLE,其行为类似于ajax响应,以突出这个问

所以我在这里有点困惑。我不明白为什么脚本在使用jquery的
.html()
而不是
innerHTML
时执行。我查看了jQuery的
.html
的源代码,似乎仍然在使用
innerHTML
。有人能解释这种行为吗

我在一次ajax响应中遇到了这个问题。我得到了html和一个
script
标记,其中包含一些javascript,我通常使用
html
,但出于某种原因,这次使用了
innerHTML
,认为没有区别

我知道这似乎是本地化的,所以我制作了一个带有超时的JSFIDLE,其行为类似于ajax响应,以突出这个问题


据我所知,jQuery将尝试使用
innerHTML
,但如果失败,它将返回到清空目标元素,并通过DOM附加新内容

更新:见下面Felix Kling的评论;基本上,如果要插入的字符串内容包含脚本或样式/链接标记,jQuery将不会使用straight
innerHTML

当这种情况发生时——在您的案例中也是如此——内容通过一个名为
domManip
的函数传递,我并不完全理解这个函数,但它确实专门查找和评估脚本


因此,简单的回答是:jQuery毕竟没有使用
innerHTML
。希望我能一步一步地告诉您发生了什么,但我对jQuery的源代码了解得不够透彻。我只是设置了一个断点(在jQuery-1.9.1.js的第6074行;jQuery最终决定不使用
innerHTML
),并稍微绕过了源代码。

+1-分析得很好。我注意到它也经历了一个有趣的过程,但我一生都找不到源代码中使用
eval
的地方。这个答案:,似乎表明脚本上也使用了
eval
。@TravisJ是的,脚本内容被传递到
globalEval()
(参见第597行),它确实使用了
eval
,测试是在中进行的<代码>!rnoInnerhtml.test(value)的计算结果为
false
。在文件的开头,它被定义为
rnoInnerhtml=/@FelixKling-Ah,这是触发器。谢谢你的澄清@TravisJ没问题,谢谢你的勾选。但是我必须说,
globalEval()
确实使用了
eval
()。没有在文档头中插入脚本(至少我在Chrome中看不到这样的脚本)。HTML标准明确提到,通过
innerHTML
()设置
script
元素时,不会对其进行评估:“注意:
script
使用
innerHTML
插入的元素在插入时不会执行。”@谢谢你的链接。不知道为什么我会有不同的想法。