首页 > 开发 > JS > 正文

关于JS插入元素节点并给class赋值问题,请大神帮助。

2017-09-05 12:50:29  来源:网友分享

我想要的效果是,点击添加按钮给指定的UL里添加LI。并按条件给其赋值;
现在遇到的问题是:点击插入按钮时,插入的第一个LI没有按条件给class赋值;求大神帮助;谢谢哈。
以下是我的代码

<!doctype html><html>    <head>        <meta charset="utf-8" />        <title></title>        <style>            .va11{                width: 300px;                height: 45px;                background-color: #004488;                color: #FFFFFF;                line-height: 45px;                padding-left: 10px;                margin-bottom: 0px;                            }            .va12{                width: 300px;                height: 45px;                background-color:#001133;                color: #FFFFFF;                    line-height: 45px;                padding-left: 10px;                    margin-bottom: 0px;                    }        </style>        <script>         window.onload = function(){             var odiv_1 = document.getElementById('od2');             var oul_1 = odiv_1.getElementsByTagName('ul')[0];             var oa1_1 = oul_1.getElementsByTagName('a');             //-----             var obat_1 = document.getElementById('inbut');             var otext_1 = document.getElementById('intxt');             //---             //点击按钮插件一个LI,并跟据条件给class赋值             obat_1.onclick = function(){                 var oli_1 = document.createElement('li');                 var oli_2 = oul_1.getElementsByTagName('li');                 oli_1.innerHTML=otext_1.value + '<a  href="javascript:;">删除</a>';                 //                 if(oli_2.length>0){                     oul_1.insertBefore(oli_1, oli_2[0]);                     //判断li%2的值是否为0,然后插入相应的className                     for(var i=0;i<oli_2.length;i++){                         if(i%2 === 0){                             oli_1.className = 'va12';                         }                         else{                             oli_1.className = 'va11';                         }                     };                     }                 else{                     oul_1.appendChild(oli_1);                 }                                  //点击删除添加的LI                 for(var i=0;i<oa1_1.length;i++){                      oa1_1[i].onclick = function(){                     alert('删除测试');                     oul_1.removeChild(this.parentNode);                      }                      };             };         }        </script>    </head>    <body>        <input type="text" value="这里输入文字" id="intxt" />        <input type="button" value="添加内容" id="inbut" />                <div id="od2">            <ul>                            </ul>        </div>    </body></html>

解决方案

第一次单击时oli_2.length为0,不走if(oli_2.length>0)里面,因此li附class的代码没有执行到,所以第一个li没有样式,而后面加进来的li可以执行到,所以后来的li样式应用上了。
你的代码除了命名不规范外,还有一个问题:就是你在每次单击时都去遍历已经添加进来的所有li(oli_2),然后根据奇偶去附Class,这样在数量多的时候势必造成性能问题。我的解决办法每次给新加进来的有且只有一个li附class。
只需把你的这段代码改成下面的即可:

                    if(oli_2.length>0){                         oul_1.insertBefore(oli_1, oli_2[0]);                         //判断li%2的值是否为0,然后插入相应的className                         for(var i=0;i<oli_2.length;i++){                             if(i%2 === 0){                                 oli_1.className = 'va12';                             }                             else{                                 oli_1.className = 'va11';                             }                         };                         }                     else{                         oul_1.appendChild(oli_1);                     }
                 oul_1.appendChild(oli_1);                 var len = oli_2.length - 1;                 oli_1.className = len % 2 === 0 ? 'va12' : 'va11';