javascript - JS求大神指教,怎么删除指定的多个子节点,与在同一个元素下创建多个相同的节点?

查看:70
本文介绍了javascript - JS求大神指教,怎么删除指定的多个子节点,与在同一个元素下创建多个相同的节点?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

求助大神,帮看看怎么才能删除创建的子节点,同时创建节点时怎么在同一个元素下创建多个相同的子元素,并且每个子元素的className都不一样。
我想要的效果是,鼠标移到LI上后,在当前这个LI里面创建几个带有className的DIV,并且鼠标移出LI时,删除刚刚创建的那几个DIV元素。谢谢大神们哈。
下面是我的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title></title>
        <style>
            body,ul,li{
                padding: 0px;
                margin: 0px;
                list-style-type: none;
            }
            .heidery_menu{
                width: 300px;
                height: auto;
                
            }
            .heidery_menu ul{
                padding-top: 10px;
                height:400px;
                width: 100%;
                border: 1px #002299 solid;
                color: #fff;
            }
            .heidery_menu ul li{
                
                height: 35px;
                line-height: 35px;
                border-bottom:1px #ccc dashed;
                background: url(img/jiantuo.png) no-repeat right 10px center;
                position: relative;
                
                
            }
            .heidery_menu ul li a{
                color: #000;
                font-size: 12px;
                font-family: "微软雅黑";
                text-decoration: none;
                margin-left: 10px;
                
            }
            .heidery_menu ul li .bottom_xian{
                width: 100%;
                height: 1px;
                background: red;
                position: absolute;
                bottom: -1px;
                z-index: 11;
            }
            .heidery_menu ul li .top_xian{
                width: 100%;
                height: 1px;
                background: red;
                position: absolute;
                top:-1px;
            }
            .heidery_menu ul li .nav{
                width: 300px;
                height:220px;
                background:#fff;
                border: 1px solid #FF0000;
                position: absolute;
                right: -301px;
                top:-1px;
            }
            .heidery_menu ul li .right{
                width: 1px;
                height:100%;
                background: #fff;
                position: absolute;
                right: -1px;
                top:0;
                z-index: 10;
            }
        </style>
        <script>
            window.onload = function(){
                var oDiv = document.getElementById('xDov');
                var oUl = oDiv.getElementsByTagName('ul')[0];
                var oLi = oUl.getElementsByTagName('li');
                console.log(oLi);
                
                
                for(var i=0;i<oLi.length;i++){
                    //alert("ds");
                    oLi[i].onmouseover = function(){
                        //alert("sf");
                    //这里怎么做才能更方便的创建子元素。
                    var odiv_1 = document.createElement('div');
                    odiv_1.className = "top_xian";
                    
                    var odiv_2 = document.createElement('div');
                    odiv_2.className = "bottom_xian";
                    
                    var odiv_3 = document.createElement('div');
                    odiv_3.className = "right";
                    
                    var odiv_4 = document.createElement('div');
                    odiv_4.className = "nav";
                    
                    this.appendChild(odiv_2);
                    this.appendChild(odiv_1);
                    this.appendChild(odiv_3);
                    this.appendChild(odiv_4);
                };
                    oLi[i].onmouseout = function(){
                        //这里怎么做才能删除,上面鼠标移上时就天的几个DIV元素。
                    }
                
                }
            }
        </script>
    </head>
    <body>
        <div class="heidery_menu" id="xDov">
            <div>全部商品</div>
            <ul>
                
                <li>
                    <a href="" >上衣</a>
                    <a href="" >大衣</a>
                    <a href="" >针织衣</a>
                    <a href="" >套装</a>
                    <a href="" >内衣</a>
                
                </li>
                <li>男士服装</li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
            </ul>
        </div>
    </body>
</html>

解决方案

https://jsfiddle.net/vzhv2gtt/

因为你的 li 里本来就没有东西,删除所有子节点就好,直接用 innerHTML = "" 就能删除。当然删除子节点的方法还很多,你可以看看

如果想方便的创建子节点,可以写个函数来解决,比如

function createDiv(className) {
    var div = document.createElement("div");
    if (className) {
        div.className = className;
    }
    return div;
}

// ....
// 这里调用
parent.appendChild(createDiv("top_xian"));

如果你只想删除创建的几个 DIV(尤其是原本LI内不为空的时候),可以用闭包把创建的 div 先保存下来

https://jsfiddle.net/vzhv2gtt/1/

function setup(parent) {
    var divs = [
        createDiv("top_xian"),
        createDiv("bottom_xian"),
        createDiv("right"),
        createDiv("nav")
    ];

    parent.onmouseover = function() {
        divs.forEach(function(child) {
            parent.appendChild(child);
        });
    };

    parent.onmouseout = function() {
        divs.forEach(function(child) {
            parent.removeChild(child);
        });
    };
}

for (var i = 0; i < oLi.length; i++) {
    setup(oLi[i]);
}

这篇关于javascript - JS求大神指教,怎么删除指定的多个子节点,与在同一个元素下创建多个相同的节点?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆