在 Javascript 中,我正在尝试创建一个新的 div。这是我为制作 div 添加的内容。
html+= "<div>" + concerts + "</div>";
但在我的浏览器中,它显示 [object HTMLCollection] 应该在 div 标签的位置。
Concerts 是一个预定义的变量。
谁能向我解释一下我可能缺少什么来完成这项工作。提前致谢。
在 Javascript 中,我正在尝试创建一个新的 div。这是我为制作 div 添加的内容。
html+= "<div>" + concerts + "</div>";
但在我的浏览器中,它显示 [object HTMLCollection] 应该在 div 标签的位置。
Concerts 是一个预定义的变量。
谁能向我解释一下我可能缺少什么来完成这项工作。提前致谢。
concerts
显然是元素的集合,例如您从中获得的元素getElementsByTagName
和类似元素。当你这样做
"<div>" + concerts + "</div>"
...你隐含地调用toString
它,所以你得到了那个"[object HTMLElementCollection]"
字符串。
如果要将集合中的所有元素放在一个div中,然后将该div添加到页面中,则不能使用字符串concat:
var div = document.createElement('div');
Array.prototype.slice.call(concerts).forEach(concerts, function(concert) {
div.appendChild(concert);
});
document.body.appendChild(div); // Or wherever you want to add the div
其中的Array.prototype.slice.call(concerts)
一部分将 HTMLElementCollection 转换为一个真正的数组,然后我们forEach
在该数组上使用循环并将元素移动到div.
(这个答案更详细地介绍。)(我们需要那slice
部分,因为 HTMLElementCollections 是通常是实时集合,因此将第一个元素移动到 div 中会将其从集合中取出,这会弄乱forEach
.)
此示例从四个不在 div 中的段落开始。然后,当您按下按钮时,它会创建一个带有填充和边框的 div,并将段落移动到其中:
document.querySelector("button").onclick = function() {
var concerts = document.getElementsByTagName("p");
var div = document.createElement('div');
div.className = "foo";
Array.prototype.slice.call(concerts).forEach(function(concert) {
div.appendChild(concert);
});
document.body.appendChild(div); // Or wherever you want to add the div
};
.foo {
border: 1px solid black;
padding: 4px;
}
<p>Paragraph 1</p>
<p>Paragraph 2</p>
<p>Paragraph 3</p>
<p>Paragraph 4</p>
<button type="button">Click me</button>
使用+=
您正在向字符串添加一个看似元素集合的对象,从而导致对其toString()
方法的隐式调用。所以你得到[object HTMLCollection]
.
html
必须是一个对象。当您尝试向对象添加某些内容时,它会将其转换为字符串,使其看起来像 [object]。您可能不想只+=
使用 DOM api 上的方法来插入音乐会(appendChild
例如,如果您进行了一些更改,可能会起作用)