HTML修改JavaScript代码表示我的HTML元素未定义

时间:2015-02-18 19:29:55

标签: javascript html dom

我目前正在尝试使用简单的分类系统。 为此,我创建了一个符合我需求的小类“类”:

var categories = [];
function Category (id, name, ownedBy){
    this.id = id;
    this.name = name;
    this.ownedBy = ownedBy;
    categories[id] = this;
}

id就是类别的ID。它的名称仅用于显示目的。并且“ownedBy”是超类别的ID,如果没有,则为“none”。

在填充我的categories-array之后,我迭代它并调用我的函数将类别添加到我的HTML代码中:

function addHTMLCategory(catID){
    var cat = categories[catID]; //Get the Category-"Object"
    if(!cat) return;             //If it doesn't exist, do nothing.

    if(cat.ownedBy != "none"){   //If the category has a supercategory,
        addHTMLCategory(cat.ownedBy); //Add it to the HTML first.
    }
    if(document.getElementById("cat"+catID)) return; //And if it already exists, dont add it again.

    //ERROR-PART: If a category has a superclass, get the superclass element.
    var contentElement = document.getElementById(cat.ownedBy=="none"?"categories":"cat"+cat.ownedBy);
    var li = document.createElement("div");
    li.id = "cat"+catID;
    li.className = "category";
    li.innerText = cat.name;
    contentElement.appendChild(li);
}

初始HTML:

<div id="categories"></div>

此函数检查类别是否具有超类别,如果是,则首先添加此类别:我这样做是为了避免应该添加类别的元素不存在。

不幸的是,确实会发生这种情况:当一个Category有一个超类别时,“contentElement”变量为null。谁能告诉我为什么?

1 个答案:

答案 0 :(得分:3)

问题在于,类别的ownedBy变量被设置为超类别的名称,而不是其ID(在我认为无关的代码的另一部分)