yuchu3d 2023-12-30 22:54 采纳率: 80%
浏览 15
已结题

HTML&Javascript中的节点添加与删除

最近在学习 HTML JS, 在实现一个小任务的时候遇到一个问题,比较困惑, 任务如下:

img


任务:1、首先在 文本输入框 输入内容 ,本例中 我输入的是 ”增加的第1行“ “增加的第二行”;

 2、 点击 ”添加“  按钮后,会在栏目框下面新增一行 ,内容就是  输入的内容;

 3、栏目框  可以删除, 把鼠标放在栏目框上面点击,会出现   确认对话框,点击确认就删除了。
 

img

问题:
1、 新增加的行 是删不掉的,只能删除 一开始就设定的栏目行。

img

希望您能解答:
1、 为什么会出现这个问题,这个现象?
2、 请给出正确的 能解决这个问题的代码。 就是 麻烦 补充一下 代码, 让新加上去的行 也能被删除。

我编写的代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="javascript1230" content="width=device-width, initial-scale=1.0">
    <title>节点的添加和删除</title>
</head>
    <style type="text/css">
        #myul{

            list-style: upper-alpha;
            position: relative;
            left: 80px;
            margin-bottom: 20px;

        }

        li{
            width: 100px;
            margin: 10px;
            border: 2px solid green;
            cursor: pointer;
        }

        #btn{
            position: relative;
            left: 110px;
            margin-bottom: 20px;
        }

        #cont{
            position: relative;
            left: 110px;
            margin-bottom: 20px;
        }
    </style>
<body>
    <ul id="myul">
        <li>首页</li>
        <li>新闻</li>
        <li>业务</li>
    </ul>
    <div id="btn" >
        <button onclick="add()">添加</button><br>        
    </div>
    <div id="cont">
        输入节点文本<input type="text" id="txt">
    </div>
    <script type="text/javascript">
        var vtxt=document.getElementById("txt");
        var vul=document.getElementById("myul");
        var vli=document.getElementById("myul").getElementsByTagName("li");
        
        function add(){
            //先判断文本文字是否存在
            if(vtxt.value.trim()==""){
                var conf=confirm("内容不能为空");
                return false;
        }else{
            console.log(vtxt.value);
            }

            var newli= document.createElement("li");
            newli.innerHTML=vtxt.value;
            vul.appendChild(newli);
            
        }
        
        for(var i=0;i<vli.length;i++){

            vli[i].onclick=function(){
                var conf=confirm("确定要删除?");
                if(conf){
                    this.parentNode.removeChild(this);
                }
            }
        }
    </script>
</body>
</html>

  • 写回答

11条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-12-30 23:00
    关注

    引自免费微信小程序:皆我百晓生

    问题原因及解决方法:

    1. 问题原因:新添加的行无法删除,是因为在代码中只给已存在的li元素绑定了删除事件,而没有给新添加的li元素绑定删除事件。

    2. 解决方法:在添加新行的代码中,同时给新行绑定删除事件。

    修改后的代码如下所示:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="javascript1230" content="width=device-width, initial-scale=1.0">
        <title>节点的添加和删除</title>
    </head>
    <style type="text/css">
        #myul{
            list-style: upper-alpha;
            position: relative;
            left: 80px;
            margin-bottom: 20px;
        }
    
        li{
            width: 100px;
            margin: 10px;
            border: 2px solid green;
            cursor: pointer;
        }
    
        #btn{
            position: relative;
            left: 110px;
            margin-bottom: 20px;
        }
    
        #cont{
            position: relative;
            left: 110px;
            margin-bottom: 20px;
        }
    </style>
    <body>
        <ul id="myul">
            <li>首页</li>
            <li>新闻</li>
            <li>业务</li>
        </ul>
        <div id="btn">
            <button onclick="add()">添加</button><br>        
        </div>
        <div id="cont">
            输入节点文本<input type="text" id="txt">
        </div>
        <script type="text/javascript">
            var vtxt=document.getElementById("txt");
            var vul=document.getElementById("myul");
            var vli=document.getElementById("myul").getElementsByTagName("li");
    
            for(var i=0;i<vli.length;i++){
                vli[i].onclick=function(){
                    var conf=confirm("确定要删除?");
                    if(conf){
                        this.parentNode.removeChild(this);
                    }
                }
            }
    
            function add(){
                if(vtxt.value.trim()==""){
                    var conf=confirm("内容不能为空");
                    return false;
                }else{
                    console.log(vtxt.value);
                }
    
                var newli= document.createElement("li");
                newli.innerHTML=vtxt.value;
                vul.appendChild(newli);
    
                // 给新行绑定删除事件
                newli.onclick = function(){
                    var conf=confirm("确定要删除?");
                    if(conf){
                        this.parentNode.removeChild(this);
                    }
                }
            }
        </script>
    </body>
    </html>
    

    这样修改后,添加的新行也能被删除了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(10条)

报告相同问题?

问题事件

  • 系统已结题 1月9日
  • 已采纳回答 1月1日
  • 请采纳用户回复 1月1日
  • 修改了问题 12月30日
  • 展开全部

悬赏问题

  • ¥15 C++ 句柄后台鼠标拖动如何实现
  • ¥15 有人会SIRIUS 5.8.0这个软件吗
  • ¥30 comsol仿真等离激元
  • ¥15 静电纺丝煅烧后如何得到柔性纤维
  • ¥15 (标签-react native|关键词-镜像源)
  • ¥100 照片生成3D人脸视频
  • ¥15 伪装视频时长问题修改MP4的时长问题,
  • ¥15 JETSON NANO
  • ¥15 VS开发qt时如何在paintgl函数中用pushbutton控制切换纹理
  • ¥20 关于 openpyxl 处理excel文件地问题