关于网页显示[object HTML标签名Element]的问题
今天学习在 JS红宝书上的 10.1.8 节关于 DocumentFragment 类型时,按照实例,大致上敲了一遍代码想要看看效果。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<ul id="myList"></ul>
<script>
var fragment = document.createDocumentFragment();
var ul = document.getElementById('myList');
(function() {
for (var i = 0, li = null; i < 3; ++i) {
li = document.createElement('li');
var textNode = document.createTextNode('Item' + (li + 1));
console.log(textNode);
li.appendChild( textNode );
fragment.appendChild(li);
}
console.log(fragment.childNodes);
})();
ul.appendChild(fragment);
console.log(fragment.childNodes);
</script>
</body>
</html>
结果却发现网页的li标签内容为 Item[object HTMLLIElement]1
产生错误的原因只是眼睛看花了
改正后即可正常渲染:
但是这个低级错误却显示了一个有趣的问题:在 createTextNode 中添加 一个 DOM 对象对页面产生的影响。
来测试一下这种现象:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
var li = document.createElement('li');
var textNode = document.createTextNode(li);
console.log(textNode); // 打印文本节点
console.log(li); // 打印元素节点
console.log(String(li)); // 将元素节点强制转换为字符串
</script>
</body>
</html>
浏览器控制台结果:
看来,在 createTextNode 方法的参数必须为字符串,若不是字符串会强制转换为字符串,元素节点是 对象,所以强制转换后会有 对象 的字符串信息在其中。