js怎么实现页面数据排序 要求table里的第一列不参加排序?

sj13467204146 2019-05-22 09:55:02
js怎么实现页面数据排序 要求table里的第一列不参加排序?
...全文
436 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
麦草CMS 2019-05-22
  • 打赏
  • 举报
回复
<tabel id="t">
<tr><td>1</td>测试1<td></td><td>测试2</td></tr>
<tr><td>2</td>测试3<td></td><td>测试4</td></tr>
</table>
var table = document.getElementById("t");
var rows = table.children;
var td1 = rows[0].children[0];
麦草CMS 2019-05-22
  • 打赏
  • 举报
回复
就如上面所说,你可以后台返回json,而不是html,排序后动态组合表;这个dom操作少点。
或者,你取出要排列的那一列单元格的数据排序,排好了相应的替换就行了。取特定单元格,用古老的children代替childNodes,
table.tr.children[0],table.tr.children[1]
sj13467204146 2019-05-22
  • 打赏
  • 举报
回复
我一直在用getElementById() 试着将排序前的第一列取出来, 一直报错。
sj13467204146 2019-05-22
  • 打赏
  • 举报
回复
这是我排序的源码, 请问怎么改能让第一列不动???
sj13467204146 2019-05-22
  • 打赏
  • 举报
回复
function convert(sValue, sDataType) { switch (sDataType) { case "int" : return parseInt(sValue); case "float" : return parseFloat(sValue); case "date" : return new Date(Date.parse(sValue)); default : return sValue.toString(); } } function generateCompareTRs(iCol, sDataType) { return function compareTRs(oTR1, oTR2) { vValue1 = convert(oTR1.cells[iCol].firstChild.nodeValue, sDataType); vValue2 = convert(oTR2.cells[iCol].firstChild.nodeValue, sDataType); if (vValue1 < vValue2) { return -1; } else if (vValue1 > vValue2) { return 1; } else { return 0; } }; } function sortTable(sTableID, iCol, sDataType) { var oTable = document.getElementById(sTableID); var oTBody = oTable.tBodies[0]; var colDataRows = oTBody.rows; var aTRs = new Array; for ( var i = 0; i < colDataRows.length; i++) { aTRs[i] = colDataRows[i]; alert(document.getElementByTagName("th").innerHTML); } if (oTable.sortCol == iCol) { aTRs.reverse(); } else { aTRs.sort(generateCompareTRs(iCol, sDataType)); } var oFragment = document.createDocumentFragment(); for ( var j = 0; j < aTRs.length; j++) { oFragment.appendChild(aTRs[j]); } oTBody.appendChild(oFragment); oTable.sortCol = iCol; }
麦草CMS 2019-05-22
  • 打赏
  • 举报
回复
firstRow = table.querySelector('th');
otherRows = table.querySelectorAll("td");//这是个节点集,你var array = Object.values(otherRows);,你遍历array就是了
sj13467204146 2019-05-22
  • 打赏
  • 举报
回复
关键是排序的时候,数据是一行一行取得,纯js没有后台数据,怎么从一行数据中把第一列取出来???
qq_42966289 2019-05-22
  • 打赏
  • 举报
回复
引用 楼主 sj13467204146 的回复:
js怎么实现页面数据排序 要求table里的第一列不参加排序?


定义一个新数组 把排序的结果放进去
把老数组的第一列 合并新数组的其余列 不就可以了吗?
麦草CMS 2019-05-22
  • 打赏
  • 举报
回复
第一列用th,其他的用td
sj13467204146 2019-05-22
  • 打赏
  • 举报
回复
用html做一张table , 我自己用js实现了排序功能, 要求,在排序的时候,第一列不动, 其他照样排序。
麦草CMS 2019-05-22
  • 打赏
  • 举报
回复
猜测你遇到的问题比帮您解决问题更难。很多都这样,模糊的描述问题。
sj13467204146 2019-05-22
  • 打赏
  • 举报
回复
你很棒, 多谢你的思路。 aTRs[j].insertBefore(aTDs[j], aTRs[j].cells[1]); 插入的是第二个数据。改成0就成功了, 多谢大家,结贴!~
天际的海浪 2019-05-22
  • 打赏
  • 举报
回复
function sortTable(sTableID, iCol, sDataType) { var oTable = document.getElementById(sTableID); var oTBody = oTable.tBodies[0]; var colDataRows = oTBody.rows; var aTRs = new Array; var aTDs = []; for ( var i = 0; i < colDataRows.length; i++) { aTRs[i] = colDataRows[i]; aTDs[i] = aTRs[i].cells[0]; alert(document.getElementByTagName("th").innerHTML); } if (oTable.sortCol == iCol) { aTRs.reverse(); } else { aTRs.sort(generateCompareTRs(iCol, sDataType)); } var oFragment = document.createDocumentFragment(); for ( var j = 0; j < aTRs.length; j++) { oFragment.appendChild(aTRs[j]); aTRs[j].insertBefore(aTDs[j], aTRs[j].cells[1]); } oTBody.appendChild(oFragment); oTable.sortCol = iCol; }

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧