问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JS怎么实现表格排序功能实例

发布网友 发布时间:2022-04-28 20:24

我来回答

2个回答

懂视网 时间:2022-05-14 21:05


页面中如下格式的人员信息表格:

1.png

表格每行的HTML结构为:

<tr>
 <td><input type="checkbox"></td>
 <td>2</td>
 <td>李斯</td>
 <td>43</td>
 <td>陕西</td></tr>

假定表格的元素id为person-list,奇数行的class名为odd。 请实现如下功能:

1、选中单选框,点击删除时对应行消失;
2、点击排序时,按照升序对表格中的每一行进行排序;
3、点击筛选,籍贯处会变成一个下拉框,选项值为当前表格中锁包含的省份名称,选中某个省份,展示对应省份的人员信息

实现代码:

<!DOCTYPE html><html lang="en"><head>
 <meta charset="UTF-8">
 <title>人员信息表格</title>
 <style type="text/css">
 body {  font-family: "arial", sans-serif; }
 #person-list {  width: 80%;  margin-left: 10%;  margin-right: 10%; }
 #person-list thead {  font-weight: bold; }
 #person-list button {  background-color: transparent;  border: 0;  font-weight: bold;  font-size: small;  padding-left: 0;  color: #6ba9ee; }
 #person-list thead tr td {  border-bottom: 1px #ccc solid; }
 #person-list tbody tr td:nth-child(2) {  font-weight: bold; }
 #person-list tbody tr td {  border-top: 1px #ccc solid;  padding-top: 5px;  padding-bottom: 5px; }
 #person-list tbody tr:nth-child(2n+1) {  background-color: #eee; }
 </style>
 <script type="text/javascript">
 window.onload=function(){
 if (!document.getElementsByClassName) {//由于较低版本的IE不识别这个。
 document.getElementsByClassName=function(cls){
  var ret=[];  var eles=document.getElementsByTagName('*');  for(var i=0,len=eles.length;i<len;i++){//indexOf()返回的是字母在字符串中的下标,>=0代表存在
  if (eles[i].className===cls /*===是严格等于*/
   ||eles[i].className.indexOf(cls+'')>=0//当比较'aaa'和'aaa '时
   ||eles[i].className.indexOf(''+cls+'')>=0///比较'aaa'和'bbb aaa ccc'时
   ||eles[i].className.indexOf(''+cls)>=0///比较'aaa'和' aaa'时
   ) {
   ret.push(eles[i]);
  }
  }  return ret;
 }
 } var checks = document.getElementsByTagName('input'); var tbody = document.getElementsByTagName("tbody")[0]; var trs = tbody.getElementsByTagName('tr'); var remove = document.getElementById("remove"); var sort = document.getElementById("sort"); var select = document.getElementById("select");

 remove.onclick = function(){
  //删除选中行
  for(var i = checks.length-1; i >= 0;i--){ //因为removeChild的时候,长度会变化,所以不能以小于length作为判断条件,应该从后往前扫描
  if(checks[i].checked){
   tbody.removeChild(checks[i].parentNode.parentNode);
  }
  }  //修改序号
  for(var i = 0;i < trs.length; i++){  var td=trs[i].getElementsByTagName("td")[1];
  td.innerHTML=i+1;
  }
  };

 sort.onclick=function(){
  //循环遍历,后面比它小的就插入到它前面去
  for(var i=0;i < trs.length; i++){  var td=trs[i].getElementsByTagName("td")[3];  for(var j=i;j < trs.length;j++){   var tdd=trs[j].getElementsByTagName("td")[3];   if((td.innerHTML - tdd.innerHTML)>0){
   td.parentNode.parentNode.insertBefore(tdd.parentNode,td.parentNode);
   }
  }
  }  //修改序号
  for(var i=0;i < trs.length;i++){  var td=trs[i].getElementsByTagName("td")[1];
  td.innerHTML=i+1;
  }
 };

 select.onclick=function(){
  //如果已经筛选过,页面中有下拉框了就不要再执行此函数了。
  if(document.getElementsByTagName('select').length>0) return false;  var provinces = [];  //把所有的省份取出来,存放到数组里
  for(var i=0;i < trs.length;i++){  var td=trs[i].getElementsByTagName("td")[4];  var prov=td.innerHTML;
  provinces.push(prov);
  }  //去重
  for(var j=0;j< provinces.length;j++){  for(var k=provinces.length;k>j;k--){ //同理,因为长度会发生变化,所以从后往前算
   if(provinces[j] === provinces[k]){
   provinces.splice(k,1);
   }
  }
  }  //创建selectElem下拉框元素,option为省份
  var selectElem = document.createElement("select");  for(var z = 0;z < provinces.length;z++){  var option=document.createElement("option");
  option.innerHTML=provinces[z];
  option.value=provinces[z];
  selectElem.appendChild(option);
  }  var childNodes=select.parentNode.childNodes;  //去掉籍贯两个字
  for(var x= 0; x< childNodes.length;x++){  if(childNodes[x].nodeType === 3){
   childNodes[x].parentNode.removeChild(childNodes[x]);
  }
  }  //在按钮之前插入select下拉框
  select.parentNode.insertBefore(selectElem,select);  //监控下拉框的option的点击事件,注意是下拉框的onchange,而不是option的onclick
  selectElem.onchange = function(){
  for(var i =0 ;i< trs.length;i++){
   trs[i].style.display="none" ;   if(trs[i].getElementsByTagName("td")[4].innerHTML == selectElem.value){
   trs[i].style.display = "";
   }
  }
  };
 };
} </script></head><body>
 <table id="person-list">
 <thead>
 <tr>
  <td>
  <button id="remove">删除</button>
  </td>
  <td>序号</td>
  <td>姓名</td>
  <td>年龄  <button id="sort">排序</button>
  </td>
  <td>籍贯  <button id="select">筛选</button>
  </td>
 </tr>
 </thead>
 <tbody>
 <tr>
  <td>
  <input type="checkbox"/>
  </td>
  <td>1</td>
  <td>张三</td>
  <td>24</td>
  <td>北京</td>
 </tr>
 <tr>
  <td><input type="checkbox"/>
  </td>
  <td>2</td>
  <td>李斯</td>
  <td>43</td>
  <td>陕西</td>
 </tr>
 <tr>
  <td><input type="checkbox"/>
  </td>
  <td>3</td>
  <td>韩信</td>
  <td>49</td>
  <td>湖北</td>
 </tr>
 <tr>
  <td><input type="checkbox"/>
  </td>
  <td>4</td>
  <td>宋江</td>
  <td>43</td>
  <td>山东</td>
 </tr>
 <tr>
  <td><input type="checkbox"/>
  </td>
  <td>5</td>
  <td>李逵</td>
  <td>38</td>
  <td>青海</td>
 </tr>
 <tr>
  <td><input type="checkbox"/>
  </td>
  <td>6</td>
  <td>林冲</td>
  <td>42</td>
  <td>北京</td>
 </tr>
 </tbody>
 </table></body></html>

热心网友 时间:2022-05-14 18:13

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8" />
<title>main.html</title>
<style type="text/css">
table {
width: 300px; border : 1px solid black;
border-collapse: collapse;
border: 1px solid black;
}

td {
border: 1px solid black;
}
</style>
<script type="text/javascript">
function paiXu ()
{
var tabNode = document.getElementsByTagName ("table")[0];
var trs = tabNode.rows;
var arr = new Array;
for ( var x = 0; x < trs.length; x++)
{
arr.push (trs[x]);
}
sortt (arr);
for ( var x = 0; x < arr.length; x++)
{
tabNode.tBodies[0].appendChild (arr[x]);
}
}

function sortt (arr)
{
for ( var x = 0; x < arr.length; x++)
{
for ( var y = x + 1; y < arr.length; y++)
{
if (parseInt (arr[x].cells[1].childNodes[0].nodeValue) <= parseInt (arr[y].cells[1].childNodes[0].nodeValue))
{
var tmp = arr[x];
arr[x] = arr[y];
arr[y] = tmp;
}
}
}
}
</script>
</head>

<body>
<input type="button" value="排序" onclick="paiXu()">
<table>
<tr>
<td>小明</td>
<td>23</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>小花</td>
<td>21</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>小高</td>
<td>12</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>小林</td>
<td>25</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>小王</td>
<td>35</td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</body>
</html>
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...频数和频率成正比,2频数一定时,频率与总次数成反比,对不对_百度... ...总次数之间的关系是( ) A.频数越大,频率越大 B.总次数一定时,频数越... 实验的总次数、频数及频率三者的关系是( )A.频数越大,频率越大B.频数... 嘎牙鱼的做法大全 安无线网要用多少元网费要交多少元不用用了要不要交网费,想寻求大家的... 无线网费1年多少钱 "Hbr"作为“港”的缩写,其在英语中的使用频率和应用示例如何? 【车主点评:吉利汽车帝豪GL 使我荣华富贵】 请问,如果,家用,自动挡,帝豪gl,英朗,科沃兹,卡罗拉,轩逸,同等价位,建议... ...景点?既能休闲的时候看看又能长点知识@@谢谢各位了! 缓存的视频在哪个文件夹? 我早上吃1个包子,和一杯豆浆;午饭只吃蔬菜喝汤不吃馒头米饭;晚饭只吃一个苹果一个香蕉,这样能减肥吗? 我要减肥,一天吃两顿饭,早餐吃一个馒头,一个鸡蛋,一碗豆浆,中午12点吃一碗米饭,三个素菜,之后晚 每天早餐随便吃吃到饱,(例如粥,馒头,蔬菜汤,豆浆)午餐只吃二支玉米,晚餐不吃。可以减肥么效果怎样 请问哪位知道粉笔课程缓存到手机(iPhone)里的视频是放在哪个文件里,用其他帐号登录后就找不到原 早餐一杯豆浆一个馒头外加一份鸡蛋粉够营养吗? 电脑客户端粉笔直播课app下载的视频存放到哪里了? 过午不食减肥期间早上一个苹果一杯豆浆一个菜加馍中午一个玉米一碗稀饭还有许多菜晚上不吃可以减肥吗 粉笔直播课离线文件缓存在手机内存的哪个文件夹 每天吃馒头和豆奶可以减肥吗 我现在减肥 早上五点多起来跑步了 六点多出去买豆浆馒头喝 豆浆是甜的 估计放有糖 会不会对减肥有影响 早上吃豆浆,馒头.鸡蛋会不会长胖? 早餐吃一个水煮蛋,一个玉米馒头,一杯豆浆,影响减肥吗?热量是多少??别骗人!! 我准备减肥,,每天这样吃可以吗?早上一杯豆浆或者稀饭.外加一个馒头. 早餐喝豆浆配馒头能减肥吗 舂节怎么过? 为什么用炖盅炖猪脚会酸 请教:卤肉的制作,都需要哪些配料? 怎么样弄红烧猪脚好吃 大中国和中国人的歌词,谁有? 我在减肥,早上喝一杯豆浆一个鸡蛋,午饭一个馒头一碗菜(肉菜都有),晚上不吃饭。每天晚上都去跑步 JS,实现表格内容排序 粉笔公考app原有账号下载的视频怎么删除? 怎么用javascript实现表格随机排序 js中表格内容排序 js中关于表格排序的问题,我想实现的是根据表格每一行的第一个单元格的... js和静态html环境下,2维数组排序 大哥200分全给你了 html+js做一个对表格内容的排序,按分数排序_百度知 ... 如何使用js完成如图的排序功能 请问,java中怎么用html和js写出一个能实现数字排序的程序 js表格功能:冻结行列,排序,列拖拽,怎么一起实现 js表格按id自动排序 js表格排序上移下移 给表格内容排序,js代码 javascript表格排序 需要用快速排序实现,实现多列不用字符排序_百度知 ... html中使用js和css如何实现对人名筛选排序? js怎么实现页面数据排序 要求table里的第一列不参加排序 如何用js代码在页面上实现tr排序 华为nova6在小米电视上投屏成功为啥画面不能同步? 手机投屏电视,电视延迟,声音和手机同步,声音和电视不同步,怎么办?哪位大神知道原因或者解决办法吗?