如何在没有第二个参数的情况下使用insertBefore()?

时间:2018-05-09 09:42:45

标签: javascript html

this示例中,insertBefore()方法的第二个参数是可选的:

  

之前要插入新节点的子节点。什么时候不   如果指定,insertBefore方法将在最后插入newnode。

我的代码:

let li = document.createElement('LI');
li.appendChild(document.createTextNode("Water"));
let list = document.getElementById('list');
list.insertBefore(li);
<ul id="list">
    <li>1</li>
    <li>2</li>
    <li>3</li>
</ul>

但是当我尝试将insertBefore与一个参数一起使用时,我有一个错误:

  

未捕获的TypeError:无法在'Node'上执行'insertBefore':2   需要参数,但只有1个存在。

但是这段代码正常工作:

list.insertBefore(li, list.childNodes[0])

2 个答案:

答案 0 :(得分:2)

w3schools又错了。 MDN更可靠:

insertBefore

  

referenceNode不是可选参数 - 您必须显式传递Node或null。如果未提供或传递无效值,则在不同的浏览器版本中可能会有不同的行为。

答案 1 :(得分:2)

  

在这个例子中说insertBefore()方法的第二个参数是可选的:

这是不正确的,请参阅MDNthe spec(虽然坦率地说,目前的规范比the old one更难以遵循)。 (不幸的是,准确性和完整性是w3schools的持续问题,强烈建议使用MDN。)您可以使用null作为第二个参数,但是您必须提供它:

let li = document.createElement('LI');
li.appendChild(document.createTextNode("Water"));
let list = document.getElementById('list');
list.insertBefore(li, null);
<ul id="list">
    <li>1</li>
    <li>2</li>
    <li>3</li>
</ul>