javascript - 如何获取文档片段的内容?
问题描述
我制作了一个小程序来克隆模板并将克隆的模板记录在控制台上。但是使用 chrome,只有第一个 console.log 语句会显示一个可以展开的文档片段对象,所有其他日志看起来像字符串。我没有看到使用 Firefox 的这个问题。所以我想知道这是一个 chrome bug 还是我做的不对?
function clickHandler(event) {
const insertPoint = document.querySelector('ul');
let liTemplate = document.querySelector('#row').content.cloneNode(true);
console.log(liTemplate);
for (let i = 1; i < 3; i++) {
liTemplate = document.querySelector('#row').content.cloneNode(true);
console.log(liTemplate);
liTemplate.querySelector('li').textContent = `row ${i}`;
insertPoint.appendChild(liTemplate);
}
}
document.querySelector("button").addEventListener("click", (event) => clickHandler(event));
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script type="module" src="demo.js"></script>
<title>Document</title>
</head>
<body>
<button>Click Me</button>
<ul>
</ul>
<template id="row">
<li>...</li>
</template>
</body>
</html>
解决方案
如果您的问题特别是在 Chrome 控制台中登录后无法与记录的片段进行交互,那只是片段为空(您已appendChild
在 上使用过li
,因此它不再在克隆的模板元素中)。这不是错误,只是 Chrome 和 Firefox 处理记录的文档片段的方式不同。Firefox 在第一行向您显示的是对片段在记录时的样子的描述,但是如果您展开片段,您会看到在展开时它是空的(firstChild
is null
)。只是控制台显示片段的方式有所不同。
您可能已经知道这一点,但控制台会在记录对象时显示对象的指示,但会在您展开对象时显示对象的状态,更多信息请参见this question的答案。
推荐阅读
- php - 如何将上传的文件移动到 Laravel 中 public_html 内的公用文件夹?
- jquery - TinyMCE KeyDown 事件不适用于 jQuery
- r - 在 R 中组合链接数据行的最佳方法是什么?
- python - 无法打开插入另一张图片的图片
- c# - 如何在c#中更改列表中二维数组中特定项的值
- junit4 - Power Mockito 显示 org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner 错误无法解决
- git - Git svn - 每个文件夹一个 git repo(拉一次)
- mysql - 带有 SUM 的 MySQL 内连接显示不正确的值
- python - 如何使用 python 或 bash 为文件中的每个值添加值“1”
- php - 如何在 cakephp 中正确构建这个 mysql 连接查询?