今天来教大家如何使用 ale.js 制作一个小而美的表格编辑器,首先先上 gif:

是不是还是有一点非常 cool 的感觉的?那么我们现在开始吧!

这是我们这篇文章结束后完成的效果(如果想继续完成请访问第五篇文章):

ok,那继续开始吧**(本篇文章是表格编辑器系列的第四篇文章,如果您还没有看过第一篇,请访问 第一篇文章(开源中国)):**

首先我们需要先添加一个 Sreach 按钮(在 handleTemplateRender 函数里):

//把 定义DOM基本结构 的 returnVal
var returnVal = "<table><thead><tr>"//改为
var returnVal = "<table><thead><button class='a-btn' onclick='this.methods.trigSearch()'>Search</button><tr>"
复制代码

之后我们需要在 methods 里面添加一个 trigSearch 函数:

trigSearch(){if (this.data.isOpenSearch) {this.data.data = this.staticData.preData;this.data.isOpenSearch = false;} else {this.data.isOpenSearch = true;}
}
复制代码

接下来,我们需要在 data 里添加一个 isOpenSearch 变量,默认为 false:

isOpenSearch: false
复制代码

还要在 staticData 里添加一个 preData,用来存储 bookData 数据:

preData: [["The Lord of the Rings", "    J. R. R. Tolkien", "English", "1954-1955", "150 million"],["The Little Prince", "Antoine de Saint-Exupéry", "French", "1943", "140 million"],["Dream of the Red Chamber", "Cao Xueqin", "Chinese", "1791", "100 million"]
]
复制代码

之后我们要在 handleTemplateRender 函数中增加一个判断,判断是否 openSearch 开启了:

//把//循环遍历bookHeader数据并输出
this.data.bookHeader.forEach(function(val, i, arr) {returnVal += "<th onclick='this.methods.handleTheadOnclick(event)'>" + val + (sortBy === i ? getSortSign() : '') + "</th>";
})returnVal += "</thead></tr><tbody>";//改为//循环遍历bookHeader数据并输出
this.data.bookHeader.forEach(function(val, i, arr) {returnVal += "<th onclick='this.methods.handleTheadOnclick(event)'>" + val + (sortBy === i ? getSortSign() : '') + "</th>";
})var cellId = -1;if (this.data.isOpenSearch) { //这里增加判断returnVal += "</tr><tr>";for (var i = 0; i < this.data.bookHeader.length; i++) {cellId++;returnVal += "<th><input data-cell='" + cellId + "' type='text' oninput='this.methods.handleSearch(this, event)' placeHolder='Search...'></th>";}
}returnVal += "</thead></tr><tbody>";
复制代码

然后我们要继续在 methods 里面添加一个名叫 handleSearch 的函数:

handleSearch(el, e) {var newData = [],elVal = el.value;this.staticData.preData.forEach(function(val, i, arr) {//判断是否拥有输入的字段if (val[e.target.dataset.cell].indexOf(elVal) !== -1) {//添加到返回对列中newData.push(val);}});this.data.bookData = newData;
}
复制代码

现在我们就已经实现了搜索功能,恭喜!

这是我们目前全部的 js 代码:

Ale("excel", {template() {return this.methods.handleTemplateRender();},methods: {handleTemplateRender() {//定义DOM基本结构var returnVal = "<table><thead><button class='a-btn' onclick='this.methods.trigSearch()'>Search</button><tr>",getSortSign = this.methods.getSortSign,sortBy = this.staticData.sortBy,rowId = -1,edit = this.data.edit;//循环遍历bookHeader数据并输出this.data.bookHeader.forEach(function(val, i, arr) {returnVal += "<th onclick='this.methods.handleTheadOnclick(event)'>" + val + (sortBy === i ? getSortSign() : '') + "</th>";})var cellId = -1;if (this.data.isOpenSearch) {returnVal += "</tr><tr>";for (var i = 0; i < this.data.bookHeader.length; i++) {cellId++;returnVal += "<th><input data-cell='" + cellId + "' type='text' oninput='this.methods.handleSearch(this, event)' placeHolder='Search...'></th>";}}returnVal += "</thead></tr><tbody>";//循环遍历bookData数据并输出this.data.bookData.forEach(function(thisBook, i, arr) {var cellId = -1;rowId++;//输出一行returnVal += "<tr>";thisBook.forEach(function(val, i, arr) {cellId++;if (rowId === edit.row && cellId === edit.cell) {returnVal += "<td><form data-cell='" + cellId + "' data-row='" + rowId + "' onsubmit='this.methods.save(event)'><input type='text' value='" + val + "'></form></td>";} else {returnVal += "<td data-cell='" + cellId + "' data-row='" + rowId + "' ondblclick='this.methods.handleBlockOndblclick(event)'>" + val + "</td>";}})returnVal += "</tr>";})returnVal += "</tbody></table>";//返回DOM结构return returnVal;},handleTheadOnclick(e) {this.methods.changeSortType(e);this.methods.sortList(e);},changeSortType(e) {this.staticData.sortBy = e.target.cellIndex;if (this.staticData.sortType === "up") {this.staticData.sortType = "down";} else {this.staticData.sortType = "up";}},sortList(e) {var index = e.target.cellIndex;if (this.staticData.sortType === "up") {this.data.bookData.sort(function(a, b) {return a[index].charCodeAt(0) > b[index].charCodeAt(0) ? 1 : -1;})} else {this.data.bookData.sort(function(a, b) {return a[index].charCodeAt(0) < b[index].charCodeAt(0) ? 1 : -1;})}this.data.bookData = this.data.bookData;},getSortSign() {if (this.staticData.sortType === "up") {return '\u2191';} else {return '\u2193';}},handleBlockOndblclick(e) {if (!this.staticData.isOpenEdit) {this.staticData.isOpenEdit = true;this.data.edit = {row: parseInt(e.target.dataset.row),cell: parseInt(e.target.dataset.cell)}}},save(e) {e.preventDefault();var input = e.target.firstChild;this.staticData.isOpenEdit = false;this.data.edit = {row: -1,cell: -1}this.data.bookData[e.target.dataset.row][e.target.dataset.cell] = input.value;this.data.bookData = this.data.bookData;},trigSearch() {if (this.data.isOpenSearch) {this.data.bookData = this.staticData.preData;this.data.isOpenSearch = false;} else {this.data.isOpenSearch = true;}},handleSearch(el, e) {var newData = [],elVal = el.value;this.staticData.preData.forEach(function(val, i, arr) {if (val[e.target.dataset.cell].indexOf(elVal) !== -1) {newData.push(val);}});this.data.bookData = newData;}},data: {bookHeader: ["Book", "Author", "Language", "Published", "Sales"],bookData: [["The Lord of the Rings", "    J. R. R. Tolkien", "English", "1954-1955", "150 million"],["The Little Prince", "Antoine de Saint-Exupéry", "French", "1943", "140 million"],["Dream of the Red Chamber", "Cao Xueqin", "Chinese", "1791", "100 million"]],edit: {row: -1,cell: -1},isOpenSearch: false},staticData: {sortBy: -1,sortType: 'down',isOpenEdit: false,preData: [["The Lord of the Rings", "   J. R. R. Tolkien", "English", "1954-1955", "150 million"],["The Little Prince", "Antoine de Saint-Exupéry", "French", "1943", "140 million"],["Dream of the Red Chamber", "Cao Xueqin", "Chinese", "1791", "100 million"]]}})Ale.render("excel", {el: "#app"})
复制代码

如果想了解更多,欢迎关注我在明天推出的第五篇教程,同时也关注一下 alejs 哦,感谢各位!

(非常重要:如果有能力的话不妨去 Github 或 码云 上 star 一下我们吧!不过如果您特别喜欢 alejs 的话也可以 watch 或 fork 一下哦!十分感谢!)

转载于:https://juejin.im/post/5c456462f265da614e2c5c7d

使用 ale.js 制作一个小而美的表格编辑器(4)相关推荐

  1. 使用 ale.js 制作一个小而美的表格编辑器(2)

    今天来教大家如何使用 ale.js 制作一个小而美的表格编辑器,首先先上 gif: 是不是还是有一点非常 cool 的感觉的?那么我们现在开始吧! 这是我们这篇文章结束后完成的效果(如果想继续完成请访 ...

  2. 使用 ale.js 制作一个小而美的表格编辑器(3)

    今天来教大家如何使用 ale.js 制作一个小而美的表格编辑器,首先先上 gif: 是不是还是有一点非常 cool 的感觉的?那么我们现在开始吧! 这是我们这篇文章结束后完成的效果(如果想继续完成请访 ...

  3. 使用 ale.js 制作一个小而美的表格编辑器(1)

    今天来教大家如何使用 ale.js 制作一个小而美的表格编辑器,首先先上 gif: 是不是还是有一点非常 cool 的感觉的?那么我们现在开始吧! 这是我们这篇文章结束后完成的效果(如果想继续完成请访 ...

  4. jsp循环输出表格_使用 ale.js 制作一个小而美的表格编辑器(1)

    今天来教大家如何使用 ale.js 制作一个小而美的表格编辑器,首先先上 gif: 是不是还是有一点非常 cool 的感觉的?那么我们现在开始吧! 这是我们这篇文章结束后完成的效果(如果想继续完成请访 ...

  5. 用JS制作一个信息管理平台完整版

      前  言 JRedu 在之前的文章中,介绍了如何用JS制作一个实用的信息管理平台. 但是那样的平台功能过于简陋了,我们今天来继续完善一下. 首先我们回顾一下之前的内容.   1.JSON的基础知识 ...

  6. 使用 Vue.js 制作一个简单的调查问卷平台

    使用 Vue.js 制作一个简单的调查问卷平台 原文  https://github.com/pramper/Demos/tree/master/Vue-Demos/Questionnaire 主题  ...

  7. 用html和js制作一个控制灯泡开关效果

    用html和js制作一个控制灯泡开关效果 **用css样式来控制div图片和文本的位置,然后用js里面onclick点击事件来控制图片的更换效果来实现当前运行图的效果** 1.以下是运行的效果图 2. ...

  8. 如何用JAVA制作一个漂亮的表格

    如何用JAVA制作一个漂亮的表格 表格图片: 选中一行时高亮显示,且字体变为红色: 在表格中添加数据: 代码如下: import java.awt.BorderLayout; import java. ...

  9. 教你用html+js制作一个自己的点名系统,实例代码分享

    简介 教你用html+js制作一个自己的点名系统,实例代码如下. 效果 代码 HTML <div class="wrapper"><h1 align=" ...

最新文章

  1. pywebio 之词云图
  2. 【Java Web开发指南】Maven+MyBatis实现增删改查的Demo
  3. RxJava学习资源整合
  4. RabbitMQ和Kafka的区别
  5. 使用mnist数据集_使用MNIST数据集上的t分布随机邻居嵌入(t-SNE)进行降维
  6. Java Double类doubleToLongBits()方法与示例
  7. 详解CorelDRAW中如何合并与拆分对象
  8. linux Centos下磁盘分区及文件系统创建与挂载
  9. [转载] NumPy Beginner‘s Guide 2e 带注释源码 七、NumPy 特殊例程
  10. amlogic_android7.1的s905x平台长按按键5s清除数据和缓存的实现思路
  11. RTCM协议阅读——RTCM数据解析
  12. 斗鱼直播云原生实践之注册中心篇
  13. 最新PHP搞笑文字表情包在线制作网站源码
  14. 阿里云 OSS 图片水印
  15. HTML字体大小的设置
  16. Java工程师是做什么的?学习java能干什么?
  17. 铁死亡,究竟该如何检测?- MedChemExpress
  18. 如何下载Ubuntu镜像
  19. HDLBits刷题全记录(五)
  20. sfc /scannow 提示 插入Windows XP SP3 CD 光盘

热门文章

  1. mysql57包解压安装_mysql5.7解压包安装教程
  2. ble l2cap 工作过程_BLE 链路层报文详解
  3. ming window 交叉编译_Golang在windows下交叉编译linux程序
  4. 根据表格长度使td里的内容换行
  5. 用VB实现带图片的XP风格的按钮控件
  6. 让英文版的LINUX 支持中文显示
  7. 8个数据清洗Python代码,复制可用,最长11行 | 资源
  8. 又一中科院AI创业公司浮出水面,刚拿下AIC挑战赛视觉感知冠军
  9. 宛如白昼,谷歌发布最强夜景拍照AI算法,单摄秒杀一众苹果华为三星
  10. 世界银行开放数据目录:后宫数据集三千个,人生赢家就是你