小盖843 2023-01-06 23:01 采纳率: 100%
浏览 22
已结题

关于#javascript#的问题:为什么我的javascript的删除操作的代码一遍历as数组就自动删除列表tbody的第二个tr行

为什么我的javascript的删除操作的代码一遍历as数组就自动删除列表tbody的第二个tr行

问题出现的错误点是 4.删除操作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        table{
            width: 500px;
            margin: 100px auto;
            border-collapse: collapse;
            text-align: center;
        }
        th,td{
            border: 1px solid #333;
        }
        thead tr{
            height: 40px;
            background-color: #ccc;
        }
    </style>
</head>
<body>
    <table cellspacing="0">
        <thead>
            <tr>
                <th>姓名</th>
                <th>科目</th>
                <th>成绩</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>

        </tbody>
    </table>

    <script>
        // 1.先准备好学生的数据
        var datas = [
            {
                name:'李一',
                subject:'javascript',
                score:100
            },
            {
                name:'熊二',
                subject:'javascript',
                score:17
            },
            {
                name:'刘三炮',
                subject:'javascript',
                score:59.5
            },
            {
                name:'王四聪',
                subject:'javascript',
                score:100000000
            },
        ]
        // 2.往tbody里面创建行:有几个人(通过数组的长度)我们就创建几行
        var tbody = document.querySelector('tbody');  //外面的for循环管的是 tr 行
        for(var i=0;i<datas.length;i++){
            // 1.创建 tr 行
            var tr = document.createElement('tr')
            tbody.appendChild(tr)
            // 2.行里面创建单元格(跟数据有关的三个单元格) td 单元格的数量取决于每个对象里面的属性的个数 for循环遍历对象
            for(var k in datas[i]){//里面的for循环管的是列 td
                var td = document.createElement('td');
                //把对象里的属性值 datas[i][k]给到td
                //console.log(datas[i][k])
                //创建单元格
                td.innerHTML = datas[i][k]
                tr.appendChild(td);
            }  
            //3.创建有删除两个字的单元格
            var td = document.createElement('td');
            td.innerHTML=("删除")
            tr.appendChild(td)
            // 4.删除操作
            var as = document.querySelectorAll('a');
            for(var i = 0;i<as.length;i++){
                as[i].onclick = function(){
                    //点击 a 删除 当前a所在的行(链接的爸爸的爸爸)
                    tbody.removeChild(this.parentNode.parentNode)
                }
            }
            
        }
    </script>

    
</body>
</html>

  • 写回答

2条回答 默认 最新

  • 皮皮平 2023-01-07 11:54
    关注

    你好,是因为你的代码写错了哦,帮你修改了一下;一共错了两个地方,一是因为没有创建a元素,你获取到的就会是空的。二是因为你定义了两个相同的变量i,应该在同一作用域下不要创建同名的变量。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            table{
                width: 500px;
                margin: 100px auto;
                border-collapse: collapse;
                text-align: center;
            }
            th,td{
                border: 1px solid #333;
            }
            thead tr{
                height: 40px;
                background-color: #ccc;
            }
        </style>
    </head>
    <body>
        <table cellspacing="0">
            <thead>
                <tr>
                    <th>姓名</th>
                    <th>科目</th>
                    <th>成绩</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>
     
            </tbody>
        </table>
     
        <script>
            // 1.先准备好学生的数据
            var datas = [
                {
                    name:'李一',
                    subject:'javascript',
                    score:100
                },
                {
                    name:'熊二',
                    subject:'javascript',
                    score:17
                },
                {
                    name:'刘三炮',
                    subject:'javascript',
                    score:59.5
                },
                {
                    name:'王四聪',
                    subject:'javascript',
                    score:100000000
                },
            ]
            // 2.往tbody里面创建行:有几个人(通过数组的长度)我们就创建几行
            var tbody = document.querySelector('tbody');  //外面的for循环管的是 tr 行
            for(var i=0;i<datas.length;i++){
                // 1.创建 tr 行
                var tr = document.createElement('tr')
                tbody.appendChild(tr)
                // 2.行里面创建单元格(跟数据有关的三个单元格) td 单元格的数量取决于每个对象里面的属性的个数 for循环遍历对象
                for(var k in datas[i]){//里面的for循环管的是列 td
                    var td = document.createElement('td');
                    //把对象里的属性值 datas[i][k]给到td
                    //console.log(datas[i][k])
                    //创建单元格
                    td.innerHTML = datas[i][k]
                    tr.appendChild(td);
                } 
                //3.创建有删除两个字的单元格
                var td = document.createElement('td');
                td.innerHTML='<a>删除</a>'
                tr.appendChild(td)
                // 4.删除操作
                var as = document.querySelectorAll('a');
                for(var j=0; j<as.length; j++){
                    as[j].onclick = function(){
                        //点击 a 删除 当前a所在的行(链接的爸爸的爸爸)
                        tbody.removeChild(this.parentNode.parentNode)
                    }
                }
                
            }
        </script>
     
        
    </body>
    </html>
     
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月15日
  • 已采纳回答 1月7日
  • 创建了问题 1月6日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效