appendChild不是一个函数错误(JAVASCRIPT)

3
我有这段代码。
var inviteSection = document.getElementByClassName("invitedFriends");
var friend = document.createElement("div").class = "friend";

var mail = document.createElement("p").class = "mail";
var span = document.createElement("span").class = "status accepted";

function main() {
    inviteSection.appendChild(friend);

    friend.appendChild(mail);
    friend.appendChild(span);
}

main();

当我运行这个chrome控制台时,它显示'Uncaught TypeError: inviteSection.appendChild is not a function'。请问有没有修复方法,帮帮我!

inviteSection 是一个 NodeList,而不是一个 DOM 元素的引用。 - Arun P Johny
6
getElementsByClassName 的复数形式。 - Akshay Arora
你能创建一个 Fiddle 吗? - Punit Gajjar
请注意,class 是一个保留字,因此您不能将其用作标识符。所以 class 属性反映在 className 属性中,例如:document.createElement("p").className = "mail"。另外,在 var mail = document.createElement("p").class = "mail"; 这种情况下,变量 mail 的值是字符串 "mail"。这是您想要的吗? - RobG
1
@ArunPJohny — getElementsByClassName 返回一个 HTMLCollection,这是一种特殊类型的 NodeList。 - RobG
1个回答

12
问题在于,正如Akshay Arora指出的那样,按类名获取元素的方法必须是复数形式。这意味着它始终会返回一个类似数组的元素集合,即使它只找到一个具有该类名的元素。(这就是Arun P Johny所说的NodeList的含义。)
如果您确信只会有一个具有该类名的元素,那么您只需要将第一行更改为
var inviteSection = document.getElementsByClassName("invitedFriends")[0];

如果有多个具有相同类名的元素,这将只返回第一个元素。

1
不是一个数组,而是一个 [HTMLCollection](https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname),一种特殊类型的 NodeList。 - RobG
好吧,你无法在其上调用任何数组方法…;-) - RobG
没错,就像 JavaScript 中的 arguments 对象一样,你可以使用 [].method.call()[].method.apply() 在它上面调用大多数 Array 方法。 - Scott Schupbach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接