可编辑的表格样式js实现代码

(1)效果:点击表格中任意一个格,表格变为可编辑的输入框,改变后取消此选中表格的点击事件,然后如果按回车键,则将改正后的文本保存在此表格中,按一下回车后恢复点击事件。

(2)涉及知识点:获取当前用户按下键得键码方法

首先火狐需要将方法中传入一个event参数,通过keyCode方法获取当前输入的键码

js代码:

//在页面装载时,让所有的td都拥有一个点击事件

$(document).ready(function() {

    //找到所有的td节点

    var tds = $("td");

    //给所有的td节点增加点击事件

    tds.click(tdclick);

});

 

//td被点击的事件

function tdclick() {

    //0.保存当前的td节点

    var td = $(this);

        //1.取出当前td中的文本内容保存起来

    var text = td.text();

        //2.清空td里面的内容

    td.html("");  //也可以用td.empty();

    //3.建立一个文本框,也就是input的元素节点

    var input = $("<input>");

        //4.设置文本框的值是保存起来的文本内容

    input.attr("value", text);

        //4.5让文本框可以响应键盘按下并弹起的事件,主要用于处理回车确认

    input.keyup(function(event) {

        //0.获取当前用户按下的键值

        //解决不同浏览器获取事件对象的差异

        var myEvent = event || window.event;

        var kcode = myEvent.keyCode;

            //1.判断是否是回车按下

        if (kcode == 13) {

            var inputnode = $(this);

                //2.保存当前文本框的内容

            var intputext = inputnode.val();

                //3.清空td里面的内容

            var tdNode = inputnode.parent();

                //4。将保存的文本框的内容填充到td中

            tdNode.html(intputext);

                //5.让td重新拥有点击事件

            tdNode.click(tdclick);

        }

    });

        //5.将文本框加入到td中

    td.append(input);  //也可以用input.appendTo(td)

 

    //5.5让文本框里面的文字被高亮选中

    //需要将jquery的对象转换成dom对象

    var inputdom = input.get(0);

    inputdom.select();

    //6.需要清除td上的点击事件

    td.unbind("click");

}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常抱歉,我之前理解成了一个npm相关的问题,现在我明白您的问题了。以下是一个Vue 2的可编辑表格示例,包括导入和导出表格数据,并保留表格样式。 HTML模板代码: ``` <template> <div> <button @click="exportTable">导出表格</button> <input type="file" ref="file" style="display:none" @change="importTable" /> <button @click="() => { this.$refs.file.click() }">导入表格</button> <table> <thead> <tr> <th>姓名</th> <th>年龄</th> <th>性别</th> </tr> </thead> <tbody> <tr v-for="(item, index) in tableData" :key="index"> <td :contenteditable="item.editable" @input="editTableData(index, 'name', $event.target.innerText)">{{ item.name }}</td> <td :contenteditable="item.editable" @input="editTableData(index, 'age', $event.target.innerText)">{{ item.age }}</td> <td :contenteditable="item.editable" @input="editTableData(index, 'gender', $event.target.innerText)">{{ item.gender }}</td> <td> <button @click="toggleEdit(index)">{{ item.editable ? '保存' : '编辑' }}</button> </td> </tr> </tbody> </table> </div> </template> ``` JS代码: ``` <script> export default { data() { return { tableData: [ { name: '张三', age: 20, gender: '男', editable: false }, { name: '李四', age: 22, gender: '女', editable: false }, { name: '王五', age: 25, gender: '男', editable: false }, ] } }, methods: { toggleEdit(index) { this.tableData[index].editable = !this.tableData[index].editable }, editTableData(index, key, value) { this.tableData[index][key] = value }, exportTable() { const table = document.querySelector('table') const tableHtml = table.outerHTML const exportHref = 'data:application/vnd.ms-excel;base64,' + window.btoa(unescape(encodeURIComponent(tableHtml))) const link = document.createElement('a') link.href = exportHref link.download = 'table.xls' link.click() }, importTable() { const file = this.$refs.file.files[0] const reader = new FileReader() reader.onload = (event) => { const tableHtml = event.target.result const parser = new DOMParser() const table = parser.parseFromString(tableHtml, 'text/html').querySelector('table') const tableData = [] table.querySelectorAll('tr').forEach((tr, index) => { if (index > 0) { const tds = tr.querySelectorAll('td') tableData.push({ name: tds[0].innerText, age: tds[1].innerText, gender: tds[2].innerText, editable: false }) } }) this.tableData = tableData } reader.readAsText(file) } } } </script> ``` 这个示例包含了一个table元素,其中包含了表头和表数据。表格数据是一个数组,每行数据都是一个对象。在表格中,我们使用了v-for指令来遍历这个数组,并渲染每行数据。每行数据都包含了一个可编辑的td元素,并且有一个编辑和保存按钮,用于控制td元素是否可编辑。 导出表格数据的方法是将table元素的outerHTML转成base64编码的字符串,然后创建一个a标签,并设置href和download属性,最后调用click方法触发下载。 导入表格数据的方法是通过一个input元素来获取用户选择的文件,然后使用FileReader对象将文件读取为文本字符串。接下来,我们使用DOMParser对象将文本字符串转换成HTML文档对象,并从中获取table元素和其中的数据。最后,我们将表格数据更新到Vue实例的data中,然后表格会自动更新渲染。 希望这个示例能够帮助到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值