javascript - 为什么点击设置 innerHTML 在 Chrome 上会触发两个解析事件?

标签 javascript html google-chrome google-chrome-devtools

利用Chrome Developer Tools中的Timeline,我用这小段代码通过innerHTML记录事件:

<!DOCTYPE html>

<html>
<head>
  <script>
    function test(){
      var wrap = document.getElementById('wrapper');
      wrap.innerHTML = "test";
    }
  </script>
</head>

<body>
  <input type="button" value="click" onClick="test();"/>
  <div id="wrapper"></div>
</body>
</html>

我可以看到一旦测试方法运行,就会触发两个解析事件:

Chrome Timeline showing parsing double events

我使用的是 Chrome 版本 23.0.1271.64 m

这是预期的事情吗?它是来自 Chrome 开发人员工具的错误吗?或者在 Chrome 下有什么可以改进的吗?

最佳答案

经过一番尝试后,我猜想这与 Chrome 需要解析字符串“test”然后重新解析页面有关,或者可能只是在添加字符串后的“wrap”元素. innerHTML 是一个奇怪的函数,因为它允许添加任何内容,因此必须进行一些验证/解析。

这有点说明,如果您将函数更改为:

function test() {
    var wrap = document.getElementById('wrapper');
    var newtext = document.createTextNode("test");
    wrap.appendChild(newtext);
}

...然后根本没有解析事件发生。

关于javascript - 为什么点击设置 innerHTML 在 Chrome 上会触发两个解析事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13335999/

相关文章:

html - 十六进制颜色在 Mac 上的 Chrome 和 Safari 之间显示不同

html - page-break/webkit-region-break 不再在 chrome 中工作了?

javascript - 用于获取当前登录用户的 Keycloak JavaScript API

javascript - 如何使用js增加onclick事件的积分?

html - CSS 仅模拟一个选择框

javascript - jQuery 占位符动画

javascript - 我的团队超出了 chrome 限制的每个域 180 个 cookie,这可以修复吗?

javascript - 有什么方法可以为带有变量的 DOM 对象设置样式吗?

javascript - 如何读取 XMLHttpRequest.onreadystatechange 回调函数中 FileReader.onloadend 中定义的变量值?

html - 样式干净的 div 标签