关于JS的问题

图片描述
哪位大神教一下,如果我想创建N多个li标签,改怎么办

阅读 2.4k
5 个回答

我想你是想要根据data里面的数据长度来创建标签吧?

for(let i = 0; i < data.length; i++) {
  //...
}

或者

for(let d of data) {
  // d就是data[i]
}

或者

data.forEach(function(d, index){
   //...
})

把所有的li拼接起来,最后只appendChild一次。

你现在这样一个个创建li 再一个个append,应该是可以实现需求的(虽然我不知道你到底想干嘛= =)

不过这样过多操作DOM,会引起过多的重绘和重排,影响性能。

如果要创建的li标签数量很多,可以先拼字符串,然后用
elem.insertAdjacentHTML(position, htmlStr)
这样一次性加上去,
这个api的第一个参数有四个,具体怎样用你查下文档吧,我懒得打字了 = =

或者用文档碎片
document.createDocumentFragment()
这个api的用法如下:

    //这是一个文档碎片
    var fragElem = document.createDocumentFragment();
    var targetElem = document.getElementById(''); //你想加的那个元素

    for(var i = 0; i < 10000; i++) {

        var liElem = document.createElement("li");
         liElem.innerHTML = '测试数字 '  + i;

        //先加在文档碎片中
        fragElem.appendChild(liElem);
    }

    //最后一次性添加
    targetElem.appendChild(fragElem);
    //添加一万个元素只引起一次重绘重排

更多具体的可以自己去查下文档

谢邀

success: function(data){
  var lis = [];
  for(var i=0,len=data.length; i<len; i++){
    lis.push('<li id='+data[i].value+' class="mui-table-view-cell"><a class="mui-navigate-right"></a>'+data[i].lab+'</li>');
  }
  list.innerHTML = lis.join('');
}

document.createDocumentFragment()用这个就不用每次都要去append了;
后者直接字符串拼接;
我之前也是这样做的,不过既然用了ajax+字符串拼接的方式,推荐使用handlebar..

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题