首页 > 原生js如何删除Ul下class为active的li?

原生js如何删除Ul下class为active的li?

比如说,ul下有5个li,其中3个class是active的,我要把这3个元素节点删除,我写了这样的代码

oBtn2.onclick=function(){
    var aActive=oUl.getElementsByClassName('active');
    for(var i=0;i<aActive.length;i++){
        oUl.removeChild(aActive[i]);
}

当点击btn2时,首先获取oUl下所有class为active的li,然后遍历删除,我后来大概知道是哪里出的问题,就是每次删除一个后,aActive的个数变了,因为aActive是动态的。
我才学js不久,只知道removeChild删除单个节点的方法,还有什么简单的办法可以实现删除一堆节点么?


数组的splice()方法,aActive.splice(0,3)


将aActive长度保存即可,for(var i=0,len=aActive.length; i<len; i++){oUl.removeChild(aActive[0])},要注意的是低版本ie不支持getElementsByClassName方法,如果要兼容,要遍历所有节点查找。getElementsByTagName,getElementsByName这些方法都是动态,实时的,即是会根据节点的增删变化而变化的


从后往前删除,这样即使删除了li,也不会影响前面节点的位置。

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<ul>
    <li class="active">1</li>
    <li >2</li>
    <li class="active">3</li>
    <li >4</li>
    <li class="active">5</li>
</ul>
<script type="text/javascript">
function removeByClass()
    {
        var ul = document.getElementsByTagName('ul')[0];
        var _li = ul.getElementsByTagName('li');
        
        for(var i = _li.length -1; i >= 0; i--){
            if(_li[i].className =='active'){
                ul.removeChild(_li[i]);
            }
        }
    }

window.onload = removeByClass();
</script>
</body>
</html>

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<ul>
  <li class='a'>1</li>
  <li class='a'>2</li>
  <li class='a'>3</li>
  <li>4</li>
</ul>
  <button>点击</button>
</body>
<script type='text/script>
var btn=document.querySelector('button');
var activeIlists=document.getElementsByClassName('a');
var ul=document.querySelector('ul');
btn.onclick=function(){
  if(activeIlists.length>0){
   for(var i=0;i<3;i++){     
     ul.removeChild(activeIlists[activeIlists.length-1]);
   }
  }
};
</script>
</html>

代码:这里

【热门文章】
【热门文章】