suchen

Heim  >  Fragen und Antworten  >  Hauptteil

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

我想要的效果是,点击添加按钮给指定的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 op_1 = document.getElementById('od2');
             var oul_1 = op_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" />
        
        <p id="od2">
            <ul>
                
            </ul>
        </p>
    </body>
</html>
PHP中文网PHP中文网2895 Tage vor382

Antworte allen(3)Ich werde antworten

  • 迷茫

    迷茫2017-04-10 17:35:54

    第一次单击时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';
    

    Antwort
    0
  • ringa_lee

    ringa_lee2017-04-10 17:35:54

    第一次点击时,oli_2先查找li,oli_2.length===0,后面oli_1被append,这时才oli_2.length>0。

    代码可读性有点差,建议变量命名更语义化一点。

    Antwort
    0
  • 高洛峰

    高洛峰2017-04-10 17:35:54

    else{
                         oul_1.appendChild(oli_1);
                          oli_1.className = 'va12';  //少了这一句
                     }

    Antwort
    0
  • StornierenAntwort