`
mutongwu
  • 浏览: 452565 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

构建可排序table

阅读更多
<style type="text/css">
table{
	border-collapse:collapse;
	width:300px;
}
table caption{
	border-right:1px solid #abc;
	border-left:1px solid #abc;
	border-top:2px solid #000;
	border-bottom:2px solid #000;
	background-color:#afd;
}
#sales tr,#sales td{
	border:1px solid #abc;
	text-align:center;
}
</style>

<table id="sales" summary="summary here">
	<caption>Main Title</caption>
		<col/>
		<col/>
		<col/>
	<thead>
		<tr><th class="asc">Col1</th><th>Col2</th><th>Col3</th></tr>
	</thead>
	<tbody>
		<tr><td>A1</td><td>S2</td><td>W3</td></tr>
		<tr><td>B1</td><td>C2</td><td>V3</td></tr>
		<tr><td>C1</td><td>X2</td><td>K3</td></tr>
	</tbody>
	<!-- tfoot><tr><td cols=3 >other description</td></tr></tfoot -->
</table>
<button onclick="fn()">Test</button>

function TableSort(id) {
	this.tbl = document.getElementById(id);
	this.lastSortedTh = null;
	if (this.tbl && this.tbl.nodeName == "TABLE") {
		var headings = this.tbl.tHead.rows[0].cells;
		for (var i = 0; headings[i]; i++) {
			if (headings[i].className.match(/asc|dsc/)) {
				this.lastSortedTh = headings[i];
			}
		}
		this.makeSortable();
	}
}
TableSort.prototype.makeSortable = function() {
	var headings = this.tbl.tHead.rows[0].cells;
	for (var i = 0; headings[i]; i++) {
		headings[i].cIdx = i;
		var a = document.createElement("a");
		a.href = "#";
		a.innerHTML = headings[i].innerHTML;
		a.onclick = function(that) {
			return function() {
				that.sortCol(this);
				return false;
			}
		}(this);
		headings[i].innerHTML = "";
		headings[i].appendChild(a);
	}
}
TableSort.prototype.sortCol = function(el) {
	var rows = this.tbl.rows;
	var alpha = [], numeric = [];
	var aIdx = 0, nIdx = 0;
	var th = el.parentNode;
	var cellIndex = th.cIdx;

	for (var i = 1; rows[i]; i++) {
		var cell = rows[i].cells[cellIndex];
		var content = cell.textContent ? cell.textContent : cell.innerText;
		var num = content.replace(/(\$|\,|\s)/g, "");
		if (parseFloat(num) == num) {
			numeric[nIdx++] = {
				value : Number(num),
				row : rows[i]
			}
		} else {
			alpha[aIdx++] = {
				value : content,
				row : rows[i]
			}
		}
	}
	function bubbleSort(arr, dir) {
		var start, end;
		if (dir === 1) {
			start = 0;
			end = arr.length;
		} else if (dir === -1) {
			start = arr.length - 1;
			end = -1;
		}
		var unsorted = true;
		while (unsorted) {
			unsorted = false;
			for (var i = start; i != end; i = i + dir) {
				if (arr[i + dir] && arr[i].value > arr[i + dir].value) {
					var temp = arr[i];
                    arr[i] = arr[i + dir];
                    arr[i + dir] = temp;
					unsorted = true;
				}
			}
		}
		return arr;
	}

	var col = [], top, bottom;
	if (th.className.match("asc")) {
		top = bubbleSort(alpha, -1);
		bottom = bubbleSort(numeric, -1);
		th.className = th.className.replace(/asc/, "dsc");
	} else {
		top = bubbleSort(numeric, 1);
		bottom = bubbleSort(alpha, 1);
		if (th.className.match("dsc")) {
			th.className = th.className.replace(/dsc/, "asc");
		} else {
			th.className += "asc";
		}
	}
    if (this.lastSortedTh && th != this.lastSortedTh) {
		this.lastSortedTh.className = this.lastSortedTh.className.replace(
				/dsc|asc/g, "");
	}
	this.lastSortedTh = th;
    col = top.concat(bottom);
	var tBody = this.tbl.tBodies[0];
	for (var i = 0; col[i]; i++) {
		tBody.appendChild(col[i].row);
	}
}
function fn() {

	var sales = document.getElementById('sales');
	var sortTable = new TableSort('sales');
}


整理自《The Art & Science of Javascript》
分享到:
评论

相关推荐

    js 实现 table 行排序 TableOrder.rar

    排序完成后,需要更新表格的DOM结构,这可能涉及重新构建`&lt;tr&gt;`元素的顺序,或者仅仅改变它们的`style.display`属性以控制可见性。 8. **性能优化**: 如果表格数据量大,频繁的排序操作可能会导致性能问题。可以...

    html中table排序

    在HTML中,`&lt;table&gt;`元素是用于展示结构化数据的标准方式。然而,HTML本身并不直接支持表格数据的排序功能。通常,我们通过...通过理解这些关键技术点,开发者可以构建出高效、易用且功能强大的表格排序功能。

    table分页与排序

    在网页开发中,数据展示是不可或缺的一部分,而`table`元素常常被用来组织和呈现结构化数据。"Table分页与排序"是一个重要的功能,它能够帮助用户更有效地浏览和管理大量的信息。在这个主题中,我们将深入探讨如何...

    jquery table的静态排序

    ### jQuery Table静态排序知识点 #### 一、简介 在网页开发过程中,经常需要对表格数据进行排序处理,以便用户能够更方便地查看和管理数据。jQuery Tablesorter插件为实现这一功能提供了一种简单而有效的方法。...

    bootstraptable-reorder-columns表格拖拽排序列

    BootstrapTable 是一个流行的开源前端组件库,用于创建交互式、响应式的HTML表格。"bootstraptable-reorder-columns" 是...通过理解和熟练运用这个插件,开发者可以构建出更符合用户需求的、高度可定制的数据展示界面。

    table表头排序

    在网页开发中,"table表头排序"是一个常见的功能,特别是在数据展示和管理的场景下。用户通过点击表格的列头可以对数据进行升序或降序排列,以方便查看和分析信息。这个功能通常涉及到前端JavaScript技术以及可能的...

    Js表格点击列排序,选择行,Blue Table代码.rar

    在这个场景中,我们关注的是一个名为"Blue Table"的JavaScript表格插件,它提供了表格数据的排序功能,以及选择行的能力。这个插件是针对Ajax/JavaScript开发者设计的资源,可以帮助他们更便捷地实现动态和用户友好...

    豪华版js实现table动态排序

    在网页开发中,数据展示通常会使用表格(Table)元素,而为了提高用户体验,动态排序功能是必不可少的。"豪华版js实现table动态排序"是一个针对网页表格进行动态排序的解决方案,它允许用户通过点击表头来切换排序...

    js实现点击table表头字段带箭头标示

    在前端开发中,JavaScript(JS)是一种至关重要的脚本语言,尤其在构建交互式用户界面时。本话题聚焦于“js实现点击table表头字段带箭头标示”,这是一个常见需求,特别是在数据展示和管理中。它使得用户可以通过...

    smarttable带排序和过滤功能的jQuery表格插件

    3. **分页显示**:当表格数据量过大时,SmartTable可实现分页显示,将数据分割成多页,减少页面加载时间,同时保持界面清晰。开发者可以自定义每页显示的行数以及页码导航样式。 ### 二、使用步骤 1. **引入资源**...

    Div仿制table送自定义Scrollbar支持排序

    首先,Div仿制table是通过CSS布局(如Flexbox或Grid)和JavaScript来构建一个看起来和表格类似的结构,这样可以更灵活地控制单元格的样式、行高和列宽,同时还能实现响应式设计。对于不支持这些新特性的老旧浏览器...

    原生js table表格插件制作表格自动排序效果

    通过以上步骤,我们可以构建一个轻量级、高效且完全自定义的表格排序功能。这个过程不仅锻炼了JavaScript基础,还提升了对DOM操作和数据处理的理解。在实际项目中,这样的插件可以灵活地与其他功能集成,为用户提供...

    display table外部分页,支持外部排序

    "display table外部分页,支持外部排序"这个主题主要涉及两个关键概念:外部分页和外部排序。 外部分页(External Pagination)指的是当数据存储在数据库或其他外部存储介质中时,只在用户需要时从服务器获取相应页...

    javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)

    本文将详细介绍一个基于JavaScript的小组件,该组件实现了原生HTML `&lt;table&gt;` 的排序功能,兼容IE、Firefox、Opera和Chrome等主流浏览器。这个小组件通过简单的HTML标记和JavaScript脚本实现,使得用户可以通过点击...

    【RPA之家转载视频教程7】在UiPath中排序数据表-如何在UiPath中对数据表进行排序-RPA技术中心.rar

    视频教程中,讲师可能会演示以上方法的实际操作,通过实例展示如何在UiPath的工作流中构建排序流程。同时,评论区的交流可以解答学习过程中遇到的疑问,进一步巩固所学知识。 总之,熟练掌握在UiPath中对数据表进行...

    pl-table示例代码

    `pl-table`提供了一系列事件,如`sort-change`(排序变化)、`filter-change`(筛选条件变化)等,可用于处理用户交互逻辑: ```html &lt;pl-table @sort-change="handleSortChange" @filter-change=...

    tablesorter table 排序

    总之,`tablesorter`是一个强大且灵活的表格排序工具,它的易用性和可扩展性使其成为网页开发者的首选。通过深入理解和实践,你可以根据项目的具体需求定制出满足各种复杂场景的表格排序解决方案。

    vxe-table vue table 表格组件功能

    总结来说,vxe-table是一个功能全面、性能优异的Vue表格组件,它将复杂的表格操作和功能简化,使得开发者可以快速构建具有专业水平的表格界面。不管是基础的数据展示,还是复杂的交互和数据处理,vxe-table都能够...

    table-dragger, 轻松拖放排序表.zip

    table-dragger, 轻松拖放排序表 表 dragger最后,你可以根据需要拖动和排序表。 演示试用演示程序。 !的灵感table dragger是一个用于构建可以重新排列drag-and-drop表的极简的普通Javascript库。特性超级容易设置ac

    基于javaweb 的bootstrap table使用案例源码下载

    首先,Bootstrap Table是Twitter Bootstrap库的一个扩展,用于创建响应式、可操作的数据表格。它的主要优点包括:自定义列、排序、过滤、分页等功能,以及支持本地和远程数据加载。在JavaWeb项目中,通常用于后台...

Global site tag (gtag.js) - Google Analytics