博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
原生JS例子
阅读量:5260 次
发布时间:2019-06-14

本文共 3179 字,大约阅读时间需要 10 分钟。

利用原生JS做一个班级统计表

实现功能:

1.点击添加建立一行表格

2.点击删除,删除一行表格

3.点击每个单元格可以输入内容,焦点移走的时候保存内容

思路分析:

1.建立简单的HTML的表格

2.通过JS向表格中添加元素

   (1):添加tr td button 等元素

   (2):添加删除按钮

3.通过DOM操作向表格中添加内容

  (1):向每个td中添加点击事件

   (2):向每个td中添加标记

   (3):寻找标记,并在标记的td中添加 input标签

   (4):焦点移除,删除标记,并且重新给每个td加上点击事件

   (5):获取输入的值,并赋值到变量

   (6):将获取的变量输入到td中保存

   (7):向删除按钮添加删除事件,删除自身tr

代码:

//建立简单的HTML表格

<body>

    <center>
        <table id="tab">
            <tr>
                <th width="25%">年级</th>
                <th width="25%">性别</th>
                <th width="25%">姓名</th>
                <th width="25%">操作</th>
            </tr>
        </table>
        <button id="but">添加</button>
    </center>
</body>

//利用JS向其中添加内容

//定义全局变量

var tabdom="";

var butdom="";
var n=0;
var trdom="";
var tddom="";
var czdom="";
var tdlength="";
var dd="";
var int="";

//初始化

window.onload = function(){
    tabdom=document.getElementById("tab");
    butdom=document.getElementById("but");
    butdom.addEventListener("click",touch);
    tabdom.setAttribute("width","50%");
    tabdom.setAttribute("border","1");
    dd=document.getElementsByTagName("td");
}

//定义添加一行的方法

function touch(){
    n++;    //设定一个标记,用来区分每个td
    trdom=document.createElement("tr");   //利用DOM添加一个TR
    trdom.style.height="30px";                 
    tdlength=document.getElementsByTagName("th");     //获取TH标签用来确定TD标签循环的次数
    for(var i=0;i<tdlength.length;i++){                   //循环添加TD和删除按钮
        tddom=document.createElement("td");       //利用DOM添加TD
        if(i == tdlength.length-1){                            //向最后一个TD中添加删除按钮
            czdom=document.createElement("button");        //利用DOM添加一个按钮
            czdom.innerHTML="删除";                       //向按钮中添加提示文字
            czdom.addEventListener("click",del);       //添加按钮删除事件
            czdom.setAttribute("flage",n);                 //向按钮添加标记,区分每个按钮
            tddom.appendChild(czdom);                  //将按钮添加到TD
            tddom.style.textAlign="center";              //设置按钮的属性,用来区分又按钮的单元格和没有按钮的单元格
        }
        trdom.appendChild(tddom);                      //循环箱TR中添加TD
        trdom.setAttribute("flage",n);                    //循环向TR中添加标记
    }
    tabdom.appendChild(trdom);                       //循环向表格中添加TR
    
    //给每个TD添加点击事件,用来添加input

    dd=document.getElementsByTagName("td");
    
    for(var f=0;f<dd.length;f++){
        //alert(dd[f]);
        dd[f].addEventListener("click",add);
    }
}
function add(){                                                 //添加input事件
    var td_a1="";
    var td_info=this;                                         //保证this是事件本身不会变化
    if(td_info.style.textAlign != ""){                  //排除向按钮中添加input标签
        return;
    }
    td_a1=td_info.innerHTML;                          //获取TD中的内容
    int=document.createElement("input");        //添加input标签
    int.setAttribute("value",td_a1);                  //向input中添加内容
    int.addEventListener("blur",xiaoshi);          //设置焦点移走的事件
    int.style.border="none";                             //删除边框
    tddom .setAttribute("set","set");                 //设置标志区分TD
    td_info.appendChild(int);                         //向TD中添加input标签
    for(var i=0;i<dd.length;i++){                       //找到标记的TD删除点击事件
        dd[i].removeEventListener("click",add);
    }
}
function xiaoshi(){                                       .//设置一个取消input的方法
    var td_a2=this;                                         //保证this是事件本身不会变化
    var int_info=int.getAttribute("value");   
    if(td_a2.getAttribute("set")=="set"){         //找到标记的TD
        td_a2.innerHTML=int_info;                  //将内容给TD
        td_a2.setAttribute("set","");                 //清除标记
    }

//向每个TD中添加点击事件

    dd=document.getElementsByTagName("td");
    for(var f=0;f<dd.length;f++){
        dd[f].addEventListener("click",add);
    }
}
function del(obj){                                                       //定义删除方法
    var obj1=this;                                                        //保证this是事件本身不会变化
    var tr=document.getElementsByTagName("tr");  
        n=obj1.getAttribute("flage");                               //获取标记
    for(var i=0;i<tr.length;i++){                                     //找到标记并执行删除操作
        if(n==tr[i].getAttribute("flage")){
        tr[i].remove();
        }
    }
}

易错点注意:

1.注意给删除按钮和TR添加标记,少添加时会引找不到标记而删掉表格

2.注意获取TD标签时不要使用tddom,tddom是添加的,并不是整个单元格的TD,应重新定义TD

3.注意给TD设置标记

4.删除点击事件后应重新给每个TD重新添加

转载于:https://www.cnblogs.com/diverman/p/8338155.html

你可能感兴趣的文章
vue和react的区别
查看>>
第十一次作业
查看>>
负载均衡策略
查看>>
微信智能开放平台
查看>>
ArcGIS Engine 中的绘制与编辑
查看>>
Oracle--通配符、Escape转义字符、模糊查询语句
查看>>
子网划分讲解及练习(一)
查看>>
c# 文件笔记
查看>>
第一页 - 工具的使用(webstorm)
查看>>
Linux 进程资源用量监控和按用户设置进程限制
查看>>
IE浏览器整页截屏程序(二)
查看>>
D3.js 之 d3-shap 简介(转)
查看>>
制作满天星空
查看>>
类和结构
查看>>
CSS3选择器(二)之属性选择器
查看>>
adidas crazylight 2018 performance analysis review
查看>>
typeset shell 用法
查看>>
python 之 循环语句
查看>>
心得25--JDK新特性9-泛型1-加深介绍
查看>>
[转]ceph网络通信模块_以monitor模块为例
查看>>