js里面一个让人头疼的简单小问题

先在:<body><div id="div1"></div></body>之后js代码里面要动态创建一个li列表,还要让li每次都插入在上一次最前面那个li的前面。肯定会用到insertBefore()方法。但是,在第一次获取li此时并没有这个节点,getElementsByTagName(“li”)【0】;肯定会出错,大神么,这个怎么解决。
2026年09月21日 15:15
有2个网友回答
网友(1):

我这也有个解决方案,虽说已有答案了外加没分拿,就当开拓思路吧。

方法:给当前li设置id做为标记,插入新li时,旧li的id清除,id转移给新li

详见下

var ulEl = document.getElementById("menu");
var str = ['a', 'b','c'];
var i = 0;
function insertLi() {
    var exLi = document.getElementById("ex");
    if (exLi) {exLi.id = "";}
    var newLi = document.createElement("li");
    newLi.id = "ex";
    newLi.innerHTML = str[i];
    ulEl.insertBefore(newLi,exLi);
    i += 1;
}

网友(2):

擦。你钻牛角尖了。换个思路。
定义个空数组,var arr =[];
var li = document.createElement("li")
li.class
.....
这个地方有可能是个for循环。
arr.push(li)

然后再翻转arr的顺序 arr = arr.reverse()

for循环数组的每一项
document.getElementById("div1").appendChild(arr[i])

2.你可以在插入第一条的时候做个判断不用,inserBefore。

希望可以帮到您