這裏是一個普通的JavaScript函數,將排序任何一組標記元素:
function sortElements(parentId, tagClass) {
var itemsToSort, p = document.getElementById(parentId);
if (p.getElementsByClassName) {
itemsToSort = p.getElementsByClassName(tagClass);
} else {
itemsToSort = getElementsByClassName(tagClass, "*", p);
}
// get all data into a sortable array
var data = [], order = [], item, placeHolder, i;
for (i = 0; i < itemsToSort.length; i++) {
item = itemsToSort[i];
// save position of item by inserting a placeholder right before it
placeHolder = document.createElement(item.tagName);
item.parentNode.insertBefore(placeHolder, item);
order.push(placeHolder);
// save item and text
data.push({obj: item, text: strTrim(item.innerHTML)});
}
// sort the item array by the text
data.sort(function(a, b) {
return(a.text.localeCompare(b.text));
});
// now reinsert items in sorted order
for (i = 0; i < data.length; i++) {
item = data[i].obj;
placeHolder = order[i];
// insert in new location
placeHolder.parentNode.insertBefore(item, placeHolder);
// remove placeholder
placeHolder.parentNode.removeChild(placeHolder);
}
}
function strTrim(str) {
return(str.replace(/^\s+/, "").replace(/\s+$/, ""));
}
// replacement for older versions of IE
function getElementsByClassName(className, tag, elm){
var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
var tag = tag || "*";
var elm = elm || document;
var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
var returnElements = [];
var current;
var length = elements.length;
for(var i=0; i<length; i++){
current = elements[i];
if(testClass.test(current.className)){
returnElements.push(current);
}
}
return returnElements;
}
你可以看到它在這裏工作:http://jsfiddle.net/jfriend00/EztNw/。這個演示顯示它對OP的表格單元格和一個有序列表進行排序,只是爲了顯示該函數適用於任何一組元素。
我知道的唯一限制是標記的元素不能是其他標記元素的子元素。適用於表格中的單元格。
這也使用getElementsByClassName()
所以如果需要舊版本的IE,那麼會添加一個替代/填充(它包含在jsFiddle中)。
這裏是如何工作的:
- 得到你想要的排序
- 把每個項目當前位於這樣一個臨時佔位符對象,我們知道在哪裏把東西放回有序
所有對象的列表
- 構建對象的數組進行排序和排序鍵(在這種情況下的文本)
- 排序該陣列
- 重新插入現在排序順序排序對象,使用PLACEHOLD呃,作爲他們去哪裏指南 - 刪除佔位符它的插槽用於
,你可以使用插件如tableSorter或dataTables – Ethan 2012-07-18 16:23:50
你有什麼嘗試?你有什麼不明白?你是否搜索過插件/代碼? – Bergi 2012-07-18 16:30:38