为什么子 html 对象未定义/空
Why is child html object undefined/null
我不知道为什么子对象在此代码中返回未定义。
代码所做的是创建一个 html 对象树,它找到子对象和该元素的父对象,它找到一个元素子对象,然后将它们添加到列表中,然后您可以(或意味着能够(单击该列表选择您想要的子对象,然后使用您选择作为新当前对象的子对象重新生成树。
一个例子
<div id="setone">
<div id="setwo-one">
<div id="setthree">
</div>
</div>
<div id="settwo-two">
</div>
</div>
列表将首先选择setone,它成为当前对象,您将看到子对象settwo-one和settwo-two,然后单击它们,然后它们成为当前对象,除非当你单击子对象时,onclick>elementstart.children[i]<变得未定义,然后找不到对象的标签或ID,因此列表中断。>
function treedialogupdate(elementstart)
{
if(elementstart != null)
{
var treelog = document.getElementById("treedialog");
var listset = treelog.getElementsByTagName("UL")[0];
listset.innerHTML = "";
var beforeitem = treelog.getElementsByClassName("before")[0];
var startitem = treelog.getElementsByClassName("start")[0];
startitem.innerHTML = "Current Object: " + elementstart.tagName + " " + elementstart.id;
for(i = 0; i < elementstart.children.length; i++)
{
if(elementstart.children[i].tagName)
{
listset.innerHTML += "<li>" + elementstart.children[i].tagName + " " + elementstart.children[i].id + "</li>";
}
}
for(i = 0; i < childObjectList.length; i++)
{
listset.children[i].onclick =function(){
treedialogupdate(elementstart.children[i]); };
}
if(elementstart.parentNode != null || elementstart.parentNode == "undefined")
{
beforeitem.innerHTML = "Parent Object: " + elementstart.parentNode.tagName + " " elementstart.parentNode.id;
beforeitem.onclick =function(){ treedialogupdate(elementstart.parentNode); };
}
else
{
beforeitem.innerHTML = "";
beforeitem.onclick = "";
}
}
}
(以下重要部分(我像这样设置点击
for(i = 0; i < elementstart.children.length; i++)
{
listset.children[i].onclick =function(){
childrenOfElement = elementstart.children;
console.log(childrenOfElement);
console.log(childrenOfElement[i]);
treedialogupdate(childrenOfElement[i]);
};
}
这是我在控制台中得到的
[section#header, section.fullwidth, section#footer, header: section#header, footer: section#footer, item: function, namedItem: function]
page-functions.js:278 undefined
你看到的是elementstart.children有孩子,但是当我去使用一个特定的元素,即childrenOfElement[i]时,它变得未定义
你的问题是i
不是你认为的在你的onclick
处理程序中的样子。 i
属于全局范围。当分配点击处理程序的 for 循环完成后,i
的值将等于 elementstart.children.length
(我们知道这一点是因为 for 循环循环直到 i
等于 elementstart.children.length
(。调用onclick
处理程序时,childrenOfElement[i]
等效于childrenOfElement[elementstart.children.length]
- 当然,undefined
.
你需要做的是为 for 循环的每次迭代创建一个新作用域(在 JavaScript 中是一个新函数(。此范围将创建一个新变量,该变量将包含该迭代中的 i 值。然后,您将使用此新变量作为 childrenOfElement
数组的索引。
实现此目的的一种性感方法是使用立即调用的函数表达式 (http://benalman.com/news/2010/11/immediately-invoked-function-expression/(:
listset.children[i].onclick = (function(index) {
return function () {
childrenOfElement = elementstart.children;
treedialogupdate(childrenOfElement[index]);
};
}(i));
(domElement(.children 是一个返回子数组的 javascript 属性
var childrenOfElement = element.children
- 在setInterval函数之前声明时未定义对象
- 使用+=运算符未定义对象中的第一个元素
- 通过 Requirejs 传递的未定义对象
- JS:防止访问未定义对象的属性时出错
- AngularJs为什么在ng禁用函数上未定义对象
- IE上未定义对象值
- JQuery函数返回一个对象,但它被集成为未定义对象
- AJAX响应带有未定义/对象文档
- 处理未定义对象的内联比三进制更聪明
- JavaScript错误未定义对象,尽管对象存在
- Javascript未定义对象
- 未定义对象子属性的Javascript类型
- Javascript多维数组未定义对象错误
- 在一条语句中获取多个未定义对象中的初始化对象
- Javascript -对象中的未定义对象
- 是否可以像扩展其他对象一样扩展未定义对象
- Java Script Ionic框架中的未定义对象
- if else子句中未定义对象的未定义属性
- 未定义对象方法
- 在JavaScript中使用typeof仍然会导致未定义对象的错误