TypeError appendChild Javascript
TypeError appendChild Javascript
我试图在我的 NAV 元素的结束标记之前插入一些链接,所以在该元素中的其余链接之后。但是,我将 运行 保留在错误消息 "Uncaught TypeError: Cannot read property 'appendChild' of undefined" 中,我无法弄清楚 where/what TypeError 是什么。我错过了什么? /: PS! 我知道 "let"(或 "const")在某些情况下是 var 的替代品,但我不知道在这里用还是不用。
注意: 我最终来到这里:enter link description here and then JavaScript closure inside loops – simple practical example 但没有任何效果。在那里我尝试了 'stemon' 的示例,但我无法弄清楚我应该在哪里添加我的 appendChild 而不会仍然出现相同的错误。即:None 这些线程让我了解我在这里实际缺少的东西。。他们可能会给我一个答案,但不是一个我能明显把握的答案。
var node = document.getElementsByTagName("NAV");
ele = document.createElement("a");
var stepup = 0;
for (stepup = 0; stepup < 8; stepup++) {
ele.innerHTML = 'test';
node.parentNode.appendChild(ele, node.nextSibling);
console.log(stepup);
}
<nav style="overflow:scroll;">
<h3>Menu</h3>
<a href="#">Link 1</a><br>
<a href="#">Link 2</a><br>
<a href="#">Link 3</a><br>
<a href="#">Link 4</a><br>
<a href="#">Link 5</a><br>
<a href="#">Link 6</a>
</nav>
由于 nav
没有父元素,因此显示错误,您还需要获取 node[0]
才能访问父元素。
这是可行的解决方案 -
var node = document.getElementsByTagName("nav");
ele = document.createElement("a");
var stepup = 0;
for (stepup = 0; stepup < 8; stepup++) {
ele.innerHTML = 'test';
node[0].parentNode.appendChild(ele, node.nextSibling);
console.log(stepup);
}
<div>
<nav style="overflow:scroll;">
<h3>Menu</h3>
<a href="#">Link 1</a><br>
<a href="#">Link 2</a><br>
<a href="#">Link 3</a><br>
<a href="#">Link 4</a><br>
<a href="#">Link 5</a><br>
<a href="#">Link 6</a>
</nav>
</div>
document.getElementsByTagName("nav")
returns一个所有匹配元素的Array,那么你要挑第一个。
您只实例化了一个元素,因为您的行 ele = document.createElement("a");
在循环之外。
你根本不需要parentNode
。
let
关键字允许创建一个作用域为包装块的变量。否则变量的作用域为父函数,但它与您遇到的问题无关。
闭包是你以后可能会学到的东西,在循环中进行异步操作和许多其他事情时很有用,但在你的情况下不需要使用。
您应该使用 HTMLCollection 方法 item() 来获取节点 (https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection/item)。此外,您不应将元素添加到父节点,而应添加到节点本身。
const node = document.getElementsByTagName("nav").item(0);
for (let stepup = 0; stepup < 8; stepup++) {
let el = document.createElement("a");
el.innerHTML = 'test';
el.href = "#";
node.appendChild(el);
node.insertBefore(document.createElement("br"), el);
}
我试图在我的 NAV 元素的结束标记之前插入一些链接,所以在该元素中的其余链接之后。但是,我将 运行 保留在错误消息 "Uncaught TypeError: Cannot read property 'appendChild' of undefined" 中,我无法弄清楚 where/what TypeError 是什么。我错过了什么? /: PS! 我知道 "let"(或 "const")在某些情况下是 var 的替代品,但我不知道在这里用还是不用。
注意: 我最终来到这里:enter link description here and then JavaScript closure inside loops – simple practical example 但没有任何效果。在那里我尝试了 'stemon' 的示例,但我无法弄清楚我应该在哪里添加我的 appendChild 而不会仍然出现相同的错误。即:None 这些线程让我了解我在这里实际缺少的东西。。他们可能会给我一个答案,但不是一个我能明显把握的答案。
var node = document.getElementsByTagName("NAV");
ele = document.createElement("a");
var stepup = 0;
for (stepup = 0; stepup < 8; stepup++) {
ele.innerHTML = 'test';
node.parentNode.appendChild(ele, node.nextSibling);
console.log(stepup);
}
<nav style="overflow:scroll;">
<h3>Menu</h3>
<a href="#">Link 1</a><br>
<a href="#">Link 2</a><br>
<a href="#">Link 3</a><br>
<a href="#">Link 4</a><br>
<a href="#">Link 5</a><br>
<a href="#">Link 6</a>
</nav>
由于 nav
没有父元素,因此显示错误,您还需要获取 node[0]
才能访问父元素。
这是可行的解决方案 -
var node = document.getElementsByTagName("nav");
ele = document.createElement("a");
var stepup = 0;
for (stepup = 0; stepup < 8; stepup++) {
ele.innerHTML = 'test';
node[0].parentNode.appendChild(ele, node.nextSibling);
console.log(stepup);
}
<div>
<nav style="overflow:scroll;">
<h3>Menu</h3>
<a href="#">Link 1</a><br>
<a href="#">Link 2</a><br>
<a href="#">Link 3</a><br>
<a href="#">Link 4</a><br>
<a href="#">Link 5</a><br>
<a href="#">Link 6</a>
</nav>
</div>
document.getElementsByTagName("nav")
returns一个所有匹配元素的Array,那么你要挑第一个。
您只实例化了一个元素,因为您的行 ele = document.createElement("a");
在循环之外。
你根本不需要parentNode
。
let
关键字允许创建一个作用域为包装块的变量。否则变量的作用域为父函数,但它与您遇到的问题无关。
闭包是你以后可能会学到的东西,在循环中进行异步操作和许多其他事情时很有用,但在你的情况下不需要使用。
您应该使用 HTMLCollection 方法 item() 来获取节点 (https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection/item)。此外,您不应将元素添加到父节点,而应添加到节点本身。
const node = document.getElementsByTagName("nav").item(0);
for (let stepup = 0; stepup < 8; stepup++) {
let el = document.createElement("a");
el.innerHTML = 'test';
el.href = "#";
node.appendChild(el);
node.insertBefore(document.createElement("br"), el);
}