转行学开发,代码100天——2018-04-22

昨天学习了JavaScript对table的基本操作,包括表格的创建,表格元素的获取,隔行换色及鼠标动作等。今天主要学习table的搜索查询及排序操作。

一.搜索查询

搜索查询核心即是将要查询的内容与表格内容相匹配。

搜索查询的方式包括:直接查询、模糊查询、多关键字查询等,其处理方式均是对字符串的处理。

直接查询:txt1 == txt2

不区分大小写查询:txt1.toLowerCase() = txt2.toLowerCase();//转化成小写

模糊搜索:txt1.search(txt2);

多关键字查询:txt1.split(‘ ’); txt.search(txt2);

如下表格:

姓名:<input id="name" type="text" name=""/>
<input id="btn" type="button" value="搜索" />
<table id="tab" border="1" width="400px">
<thead>
<td>ID</td>
<td>姓名</td>
<td>年龄</td>
<td>操作</td>
</thead>
<tbody>
<tr>
<td>1</td>
<td>张伟</td>
<td>23</td>
<td></td>
</tr>
<tr>
<td>2</td>
<td>Blue</td>
<td>21</td>
<td></td>
</tr>
<tr>
<td>3</td>
<td>张三</td>
<td>23</td>
<td></td>
</tr>
<tr>
<td>4</td>
<td>李四</td>
<td>22</td>
<td></td>
</tr>
</tbody> </table>

JavaScript实现查询

1.直接查询

window.onload = function(){
var oBtn = document.getElementById('btn');
var Name = document.getElementById('name');
var oTab = document.getElementById('tab'); oBtn.onclick = function(){
for (var i = 0; i < oTab.tBodies[0].rows.length; i++) {
var txt =oTab.tBodies[0].rows[i].cells[1].innerHTML;
var oname =Name.value;
if (txt==oname) {
oTab.tBodies[0].rows[i].style.background ="yellow";
}
}
}
};

需要各个匹配字符内容,必须一模一样。

显然这种方式提高了对输入条件的要求,实际应用中也并不可行,因此需要放宽查询条件的要求。这时要对查询的内容进行处理。

主要包括:

1>.弱化大小写的要求:

txt.toLowerCase()
    var txt =oTab.tBodies[0].rows[i].cells[1].innerHTML.toLowerCase();
var oname =Name.value.toLowerCase();
if (txt==oname) {
oTab.tBodies[0].rows[i].style.background ="yellow";
}

2>.弱化字符完整性要求:search方法——模糊查询方法

txt.search(oname)!=-1

    var txt =oTab.tBodies[0].rows[i].cells[1].innerHTML.toLowerCase();
var oname =Name.value.toLowerCase();
// if (txt==oname) {
// oTab.tBodies[0].rows[i].style.background ="yellow";
// } if(txt.search(oname)!=-1) //模糊搜索
{
oTab.tBodies[0].rows[i].style.background = "green";
}else oTab.tBodies[0].rows[i].style.background ="";

3.多关键字查询:split分割

    //多关键字查询
var arr = oname.split(' ');
oTab.tBodies[0].rows[i].style.background ="";
// alert(arr);
for (var j = 0; j < arr.length; j++) {
if(txt.search(arr[j])!=-1) //多关键字查询
{
oTab.tBodies[0].rows[i].style.background = "green";
}
}

即将多关键字查询内容通过split方法整理成一个字符串

通过循环,查找每一行中有带查询内容的项,结合了模糊查询search方法。

二.table 排序

在表格的正式开始前,可以试着实现一个小例子——ul列表元素的移动。

通过点击“移动”按钮,将绿色区域的li项逐一添加到另一区域:

其实现如下:

        window.onload = function(){
var oul1 = document.getElementById("ul1");
var oul2 = document.getElementById("ul2");
var obtn = document.getElementById("btn");
obtn.onclick = function(){
if (oul1.children.length>0) {
var oli = oul1.children[0];
oul1.removeChild(oli);
oul2.appendChild(oli);
}
};
}; </script>

实现的简单逻辑是,找到ul1中的第一个li,然后将该li从ul1中移出,将移出的li添加到ul2中。

简单地看,这样的实现并没有什么问题,但是忽略了一个知识点 appendChild 的用法。

简单地说 appendChild方法分两步实现:

1>从原父级中删除;

2>插入到新父级节点。

所以直接将ul1中的第一个li加到ul2中即可

紧接着,如果将ul1中的元素直接插入到末尾,该如何实现呢?

其实直接对ul1中appendChild即可

有了前面两种操作的实践,同样对table中的排序问题实现也是如此。即找到一列数中最小的,将其插入到末尾,以此类推,直至最大的插到末尾即可。

(向末尾插入一个,其余的往上顶一个)

如此试着来实现一下一个普通的列表序号排序

12-2-33-14-23-4的正确序号为2-4-12-14-23-33

将所有li的内容装入到一个数组中,即该问题转化成了一个数组排序的问题了。

那能否直接使用li的数组方法进行排序呢?

执行后,发现并不能;

提示错误为“无sort()方法”;难道getElementsByTagName获取的不是数组吗?

No,真的不是数组,而是对象集合。。。(此刻,再次意识到基础是多么重要。。不然怎么也想不通)

那.....难道此路不通???

可否将该集合转化成数组,然后用该数组去排序呢?不妨一试。

window.onload =function(){
var oul1 = document.getElementById("ul1");
var oBtn = document.getElementById("btn"); oBtn.onclick = function(){
var arr =[];
var oli = document.getElementsByTagName("li");
// alert(oli);//对象集合 ObjectHTMLCollection
// oli.sort();
for (var i = 0; i < oli.length; i++) {
arr[i] = oli[i]
}
arr.sort(function(li1,li2){
var n1 = parseInt(li1.innerHTML);
var n2 = parseInt(li2.innerHTML);
return n1-n2;
});
var div = document.getElementById("div");for (var j = 0; j < arr.length; j++) {
div.innerHTML+= "-"+arr[j].innerHTML;
}
};
}

即先将oli集合转化成arr数组;通过arr数组的sort方法进行排序,最后打印输出。

从结果上看,该方法是可行的。因此将arr内容重新添加到ul中,即可实现该列表的排序

如此,对table表格的排序实现也可按照这个实现过程。

    //表格table排序
window.onload =function(){
var oBtn = document.getElementById('btn');
var oTab = document.getElementById('tab');
oBtn.onclick =function(){
//获取表格行序号数组——直接转换
var arr =[];
for (var i = 0; i < oTab.tBodies[0].rows.length; i++) {
arr[i] = oTab.tBodies[0].rows[i];
} //数组排序
arr.sort(function(tr1,tr2){
var n1 = parseInt(tr1.cells[0].innerHTML);
var n2 = parseInt(tr2.cells[0].innerHTML);
return n1-n2;
}); for (var j = 0; j < arr.length; j++) {
oTab.tBodies[0].appendChild(arr[j]);
}
};
};

至此,即实现了表格排序的全过程。

day37—javascript对表格table的操作应用(二)的更多相关文章

  1. day36—javascript对表格table的操作应用(一)

    转行学开发,代码100天——2018-04-21 今天记录一下,JavaScript对表格table的操作应用,包括表格元素的获取,创建,删除等. 一个普通的完整表格包括以下几个部分:table-&g ...

  2. jQuery动态对表格Table进行添加或删除行以及修改列值操作

    jQuery,不仅可以以少量的代码做很多操作,而且兼容性好(各种浏览器,各种版本). 下面用jQuery动态对表格Table进行添加或删除行以及修改列值操作 1.jQuery代码 <script ...

  3. JavaScript(第二十天)【DOM操作表格及样式】

    DOM在操作生成HTML上,还是比较简明的.不过,由于浏览器总是存在兼容和陷阱,导致最终的操作就不是那么简单方便了.本章主要了解一下DOM操作表格和样式的一些知识. 一.操作表格 <table& ...

  4. 使用 iview Table 表格组件修改操作的显示隐藏

    使用 iview Table 表格组件修改操作的显示隐藏,如下图 1.如何设置 table 操作按后台传入的状态值去渲染 不同的按钮? 解决方法 我们在vue2中,动态渲染html 使用的是 retu ...

  5. 采用DOM进行表格的修改操作

    2015-08-31 <html> <head> <title>采用DOM进行表格的修改操作</title> <script language=& ...

  6. JavaScript 实现表格隔行变色

    JavaScript 实现表格隔行变色 版权声明:未经授权,严禁分享! 构建界面 界面HTML代码 <style> #data,th,td{ border: 1px solid #aaaa ...

  7. jQuery 选择表格(table)里的行和列及改变简单样式

    本文只是介绍如何用jQuery语句对表格中行和列进行选择以及一些简单样式改变,希望它可以对jQuery表格处理的深层学习提供一些帮助jQuery对表格(table)的处理提供了相当强大的功能,比如说对 ...

  8. javascript生成表格增删改查 JavaScript动态改变表格单元格内容 动态生成表格 JS获取表格任意单元格 javascript如何动态删除表格某一行

    jsp页面表格布局Html代码 <body onload="show()"> <center> <input type="text" ...

  9. JavaScript创建表格的两种方式

    方式一: var data = [ { id: 1, name: "first", age: 12 }, { id: 2, name: "second", ag ...

随机推荐

  1. 前端 CSS的选择器 伪类选择器 CSS3 nth-child()

    first-child 选中第一个标签 应用CSS样式 <!DOCTYPE html> <html lang="en"> <head> < ...

  2. JDK11 | 第四篇 : 增强API

    文章首发于公众号<程序员果果> 地址 : https://mp.weixin.qq.com/s/O0xntC-JfeSBk-9x2QfwnA 一.简介 JDK 9~11 在语言语法方面有一 ...

  3. java基础常问面试题

    1.面向对象和面向过程的区别 面向过程 :面向过程性能比面向对象高. 因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机.嵌入式开发.Linux/Unix ...

  4. [SP3267]DQUERY - D query

    题目传送门 维护一个区间内不同数的个数,最直观的想法是直接排序后用树状数组维护即可.但是我们发现n只有3e4,于是我们想到了可以拿一个$O(n\sqrt{n})$的莫队维护.关于莫队算法如果有不知道的 ...

  5. 20191119PHP.class类练习

    <?phpclass person{ public $name; private $age; public $sex; const WOMAN=0; const MAN=1; function ...

  6. 模拟.net post请求属性

    这两天在做一个nodejs的爬虫项目,需要模拟post请求获得网站数据.遇到2个asp.net的网站,掉到坑里面,调试了好几天.总结一下过程. 一般我们模拟post请求的时候最重要的就是post请求里 ...

  7. RSA加密原理与秘钥、公钥生成

    RSA加密(非对称加密) RSA公开密钥密码体制.所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制.(不可逆向运算的加密方法) ...

  8. Python2 安装教程

    目录 1. 推荐阅读 2. 安装包下载 3. 安装步骤 1. 推荐阅读 Python基础入门一文通 | Python2 与Python3及VSCode下载和安装.PyCharm破解与安装.Python ...

  9. 怎样group by一列 select多列

    之前sql用的少 竟然不知道这个小技巧 1 将要查询的列 添加到group by后面(会影响查询结果) 2 使用聚合函数如 max select a.accounttitlecode, max(b.c ...

  10. [python 学习] requests 库的使用

    1.get请求 # -*- coding: utf-8 -*- import requests URL_IP = "http://b.com/index.php" pyload = ...