JavaScript对表格或元素按文本,数字或日期排序的方法对表格或元素按文本,数字或日期排序的方法
本文实例讲述了JavaScript对表格或元素按文本,数字或日期排序的方法。分享给大家供大家参考。具体实现方法如下:
// Sorting table columns correctly by text, number or date. There are other
// versions, plugins, etc., for this but they either are restricted to specific
// date formats, or require EVERY row-element to be given a sort attribute; mine
// can handle many different date and number formats, and even allows for specific
// cells that may not conform to the overall date/number format for that column.
// My version also enables sorting of element hierarchies: such as a DIV containing
// P-paragraphs and SPANs - this could even be an image-gallery containing prices
// or dates within spans. Very efficient as well!!
// Example: andrew.dx.am/sortgallerydel.html
// AddSortToTables(); will make the table headers clickable, to sort columns in
// ascending or descending order, for any tables with class="sortIt".
// SortTable(tbl, col); will sort the table (tbl is an id or table object) by
// the supplied column index (indexed from 0) in ascending or descending order.
// AddSortByDate(tbl, col, dateMask); enables sorting of a column by date,
// specified by a date-mask such as 'dd-mmm-yy'.
// AddSortByNumber(tbl, col); enables sorting of a column by number. This assumes a
// period . as the decimal separator (if present); it ignores any other non-numeric
// characters.
// SortElements(parentEl, childTag, colTag, colIndex); will sort (non-table)
// elements in ascending or descending order. For example, an UL containing LIs
// and SPANs. colIndex specifies which span to sort; there may be more than one in
// the LI (0 indexed).
// Example: SortElements('divid', 'p', 'span', 2);
// 3rd span within each paragraph.
//
// AddSortByDate2(parentEl, childTag, colTag, colIndex, dateMask); and
// AddSortByNumber2(parentEl, childTag, colTag, colIndex)
// provide the same feature-set as AddSortByDate and AddSortByNumber does
// for tables, but for element hierarchies.
// If there are dates or numbers in a column (or element) which don't meet the
// date-mask or number formatting necessary to sort correctly, then these individual
// elements can be given the attribute "sort" and they will still sort correctly!
// For example, with a date column <td sort="2012/12/20"> will still sort a
// cell correctly. (This format 'YYYY/MM/DD' will be converted into a Date() object.)
var MonthNames = ["January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December"];
var DayNames = [ "Sunday", "Monday", "Tueday", "Wednesday", "Thursday",
"Friday", "Saturday" ];
var ShortMths = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
"Sep", "Oct", "Nov", "Dec"];
var ShortDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
var AddEvent = function (elem, eventType, func) {
// Helper function.
if ( elem.addEventListener )
AddEvent = function (elem, eventType, func) {
elem.addEventListener(eventType, func, false);
};
else if ( elem.attachEvent )
AddEvent = function (elem, eventType, func) {
elem.attachEvent('on' + eventType, func);
};
else
AddEvent = function (elem, eventType, func) {
elem['on' + eventType] = func;
};
AddEvent(elem, eventType, func);
};
// Sort methods/algorithms attributed:
var SortTable = function (tbl, col) {
// could be called directly
SortElements(tbl, 'tr', 'td', col);
};
var SortElements = function (parentEl, childTag, colTag, colIndex) {
// example use: SortElements('table1','tr','td',2)
// or SortElements('list1','li')
// or SortElements('divName','p','span',3)
var i, j, cTags = {}, startAt = 0, childLen, aChild, elem,
sortBy, content, elems = [], sortedLen, frag, hdrsLen, hdr;
var parent = (typeof parentEl === 'string') ?
document.getElementById(parentEl) : parentEl;
var AscText = function (a, b) { // sort() by .data as text
var x = a.data, y = b.data,
xNum = parseFloat(x), yNum = parseFloat(y);
// check if each begin with a number..