You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome与Firefox在Document Fragment插入前后控制台输出差异咨询

Document Fragment在Chrome与Firefox控制台的输出差异

现象细节

  • 插入DOM场景:
    • Chrome控制台会输出空的Document Fragment(插入前、插入后均为空)
    • Firefox插入前输出非空片段,插入片段到DOM后输出空片段
  • 未插入DOM场景:Chrome和Firefox控制台都会输出非空的Document Fragment

测试环境:Chrome 126、Firefox 128(均为最新稳定版)


测试代码

HTML

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>template test</title>
</head>

<body>
  <div class="container">
    <div class="bar">
      <button type="button">插入前输出片段,插入后再次输出</button>
      <button type="button">仅输出片段不插入</button>
    </div>
    <div class="list">
      <ul>
        <template>
          <li>列表项</li>
        </template>
      </ul>
    </div>
  </div>
</body>

</html>

CSS

.container {
  width: 200px;
  height: 200px;
  display: flex;
  flex-direction: column;
  font-family: sans-serif;
}

.bar {
  flex-basis: max-content;
  display: flex;
  padding: 6px;
  gap: 6px;
}

.list {
  overflow: auto;
  border: 1px solid;
}

button {
  text-align: left;
}

JavaScript

const init = function() {
  let fn0 = function() {
    let fragment = document.querySelector('template').content.cloneNode(true);
    console.log('插入前: ', fragment); // Chrome输出空,Firefox输出非空
    document.querySelector('ul').append(fragment);
    console.log('插入后: ', fragment);
  };
  let fn1 = function() {
    let fragment = document.querySelector('template').content.cloneNode(true);
    console.log('未插入: ', fragment); // 两者均输出非空
  };
  let buttons = document.getElementsByTagName('button');
  buttons[0].addEventListener('click', fn0);
  buttons[1].addEventListener('click', fn1);
};
window.addEventListener('load', init);

内容的提问来源于stack exchange,提问作者user2227119

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 01:12:04