亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sortabletable.js

?? 工資管理系統
?? JS
字號:

function SortableTable(oTable, oSortTypes) {

	this.element = oTable;
	this.tHead = oTable.tHead;
	this.tBody = oTable.tBodies[0];
	this.document = oTable.ownerDocument || oTable.document;

	this.sortColumn = null;
	this.descending = null;

	var oThis = this;
	this._headerOnclick = function (e) {
		oThis.headerOnclick(e);
	};

	// only IE needs this
	var win = this.document.defaultView || this.document.parentWindow;
	this._onunload = function () {
		oThis.destroy();
	};
	if (win && typeof win.attachEvent != "undefined") {
		win.attachEvent("onunload", this._onunload);
	}

	this.initHeader(oSortTypes || []);
}

SortableTable.gecko = navigator.product == "Gecko";
SortableTable.msie = /msie/i.test(navigator.userAgent);
// Mozilla is faster when doing the DOM manipulations on
// an orphaned element. MSIE is not
SortableTable.removeBeforeSort = SortableTable.gecko;

SortableTable.prototype.onsort = function () {};

// default sort order. true -> descending, false -> ascending
SortableTable.prototype.defaultDescending = false;

// shared between all instances. This is intentional to allow external files
// to modify the prototype
SortableTable.prototype._sortTypeInfo = {};

// adds arrow containers and events
// also binds sort type to the header cells so that reordering columns does
// not break the sort types
SortableTable.prototype.initHeader = function (oSortTypes) {
	var cells = this.tHead.rows[0].cells;
	var l = cells.length;
	var img, c;
	for (var i = 0; i < l; i++) {
		c = cells[i];
		img = this.document.createElement("IMG");
		img.src = "images/blank.png";
		c.appendChild(img);
		if (oSortTypes[i] != null) {
			c._sortType = oSortTypes[i];
		}
		if (typeof c.addEventListener != "undefined")
			c.addEventListener("click", this._headerOnclick, false);
		else if (typeof c.attachEvent != "undefined")
			c.attachEvent("onclick", this._headerOnclick);
		else
			c.onclick = this._headerOnclick;
	}
	this.updateHeaderArrows();
};

// remove arrows and events
SortableTable.prototype.uninitHeader = function () {
	var cells = this.tHead.rows[0].cells;
	var l = cells.length;
	var c;
	for (var i = 0; i < l; i++) {
		c = cells[i];
		c.removeChild(c.lastChild);
		if (typeof c.removeEventListener != "undefined")
			c.removeEventListener("click", this._headerOnclick, false);
		else if (typeof c.detachEvent != "undefined")
			c.detachEvent("onclick", this._headerOnclick);
	}
};

SortableTable.prototype.updateHeaderArrows = function () {
	var cells = this.tHead.rows[0].cells;
	var l = cells.length;
	var img;
	for (var i = 0; i < l; i++) {
		img = cells[i].lastChild;
		if (i == this.sortColumn)
			img.className = "sort-arrow " + (this.descending ? "descending" : "ascending");
		else
			img.className = "sort-arrow";
	}
};

SortableTable.prototype.headerOnclick = function (e) {
	// find TD element
	var el = e.target || e.srcElement;
	while (el.tagName != "TD")
		el = el.parentNode;

	this.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);
};

// IE returns wrong cellIndex when columns are hidden
SortableTable.getCellIndex = function (oTd) {
	var cells = oTd.parentNode.childNodes;
	var l = cells.length;
	var i;
	for (i = 0; cells[i] != oTd && i < l; i++)
		;
	return i;
};

SortableTable.prototype.getSortType = function (nColumn) {
	var cell = this.tHead.rows[0].cells[nColumn];
	var val = cell._sortType;
	if (val != "")
		return val;
	return "String";
};

// only nColumn is required
// if bDescending is left out the old value is taken into account
// if sSortType is left out the sort type is found from the sortTypes array

SortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {
	if (sSortType == null)
		sSortType = this.getSortType(nColumn);

	// exit if None
	if (sSortType == "None")
		return;

	if (bDescending == null) {
		if (this.sortColumn != nColumn)
			this.descending = this.defaultDescending;
		else
			this.descending = !this.descending;
	}
	else
		this.descending = bDescending;

	this.sortColumn = nColumn;

	if (typeof this.onbeforesort == "function")
		this.onbeforesort();

	var f = this.getSortFunction(sSortType, nColumn);
	var a = this.getCache(sSortType, nColumn);
	var tBody = this.tBody;

	a.sort(f);

	if (this.descending)
		a.reverse();

	if (SortableTable.removeBeforeSort) {
		// remove from doc
		var nextSibling = tBody.nextSibling;
		var p = tBody.parentNode;
		p.removeChild(tBody);
	}

	// insert in the new order
	var l = a.length;
	for (var i = 0; i < l; i++)
		tBody.appendChild(a[i].element);

	if (SortableTable.removeBeforeSort) {
		// insert into doc
		p.insertBefore(tBody, nextSibling);
	}

	this.updateHeaderArrows();

	this.destroyCache(a);

	if (typeof this.onsort == "function")
		this.onsort();
};

SortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {
	var oThis = this;
	this._asyncsort = function () {
		oThis.sort(nColumn, bDescending, sSortType);
	};
	window.setTimeout(this._asyncsort, 1);
};

SortableTable.prototype.getCache = function (sType, nColumn) {
	var rows = this.tBody.rows;
	var l = rows.length;
	var a = new Array(l);
	var r;
	for (var i = 0; i < l; i++) {
		r = rows[i];
		a[i] = {
			value:		this.getRowValue(r, sType, nColumn),
			element:	r
		};
	};
	return a;
};

SortableTable.prototype.destroyCache = function (oArray) {
	var l = oArray.length;
	for (var i = 0; i < l; i++) {
		oArray[i].value = null;
		oArray[i].element = null;
		oArray[i] = null;
	}
};

SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {
	// if we have defined a custom getRowValue use that
	if (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)
		return this._sortTypeInfo[sType].getRowValue(oRow, nColumn);

	var s;
	var c = oRow.cells[nColumn];
	if (typeof c.innerText != "undefined")
		s = c.innerText;
	else
		s = SortableTable.getInnerText(c);
	return this.getValueFromString(s, sType);
};

SortableTable.getInnerText = function (oNode) {
	var s = "";
	var cs = oNode.childNodes;
	var l = cs.length;
	for (var i = 0; i < l; i++) {
		switch (cs[i].nodeType) {
			case 1: //ELEMENT_NODE
				s += SortableTable.getInnerText(cs[i]);
				break;
			case 3:	//TEXT_NODE
				s += cs[i].nodeValue;
				break;
		}
	}
	return s;
};

SortableTable.prototype.getValueFromString = function (sText, sType) {
	if (this._sortTypeInfo[sType])
		return this._sortTypeInfo[sType].getValueFromString( sText );
	return sText;
	/*
	switch (sType) {
		case "Number":
			return Number(sText);
		case "CaseInsensitiveString":
			return sText.toUpperCase();
		case "Date":
			var parts = sText.split("-");
			var d = new Date(0);
			d.setFullYear(parts[0]);
			d.setDate(parts[2]);
			d.setMonth(parts[1] - 1);
			return d.valueOf();
	}
	return sText;
	*/
	};

SortableTable.prototype.getSortFunction = function (sType, nColumn) {
	return (sType != "String")? this._sortTypeInfo[sType].compare : SortableTable.stringCompare;
};

SortableTable.prototype.destroy = function () {
	this.uninitHeader();
	var win = this.document.parentWindow;
	if (win && typeof win.detachEvent != "undefined") {	// only IE needs this
		win.detachEvent("onunload", this._onunload);
	}
	this._onunload = null;
	this.element = null;
	this.tHead = null;
	this.tBody = null;
	this.document = null;
	this._headerOnclick = null;
	this.sortTypes = null;
	this._asyncsort = null;
	this.onsort = null;
};

// Adds a sort type to all instance of SortableTable
// sType : String - the identifier of the sort type
// fGetValueFromString : function ( s : string ) : T - A function that takes a
//    string and casts it to a desired format. If left out the string is just
//    returned
// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort
//    compare function. Takes two values and compares them. If left out less than,
//    <, compare is used
// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function
//    that takes the row and the column index and returns the value used to compare.
//    If left out then the innerText is first taken for the cell and then the
//    fGetValueFromString is used to convert that string the desired value and type

SortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {
	this._sortTypeInfo[sType] = {
		type:				sType,
		getValueFromString:	fGetValueFromString || SortableTable.idFunction,
		compare:			fCompareFunction || SortableTable.basicCompare,
		getRowValue:		fGetRowValue
	};
};

// this removes the sort type from all instances of SortableTable
SortableTable.prototype.removeSortType = function (sType) {
	delete this._sortTypeInfo[sType];
};

SortableTable.basicCompare = function compare(n1, n2) {
//	return n1.value.localeCompare(n2.value);
	if (n1.value < n2.value)
		return -1;
	if (n2.value < n1.value)
		return 1;
	return 0;
};

// this function compare value by localeCompare.
SortableTable.stringCompare = function scompare(n1, n2) {
	return n1.value.localeCompare(n2.value);
};

SortableTable.idFunction = function (x) {
	return x;
};

SortableTable.toUpperCase = function (s) {
	return s.toUpperCase();
};

SortableTable.toDate = function (s) {
	var parts = s.replace("/","-").split("-");
	var d = new Date(0);
	d.setFullYear(parts[0]);
	d.setDate(parts[2]);
	d.setMonth(parts[1] - 1);
	return d.valueOf();
};


// add sort types
SortableTable.prototype.addSortType("Number", Number);
SortableTable.prototype.addSortType("CaseInsensitiveString", SortableTable.toUpperCase);
SortableTable.prototype.addSortType("Date", SortableTable.toDate);
SortableTable.prototype.addSortType("String");
// None is a special case

// add UsCurrency
SortableTable.prototype.addSortType( "UsCurrency", usCurrencyConverter );

function usCurrencyConverter(s){var n=s;if(n=="N/A")return parseFloat("0");if(n.indexOf("%")!=-1)return usCurrencyConverter(s.substr(0,s.length-1));var i=s.indexOf("$");if(i==-1)i=s.indexOf(",");if(i!=-1){var p1=s.substr(0,i);var p2=s.substr(i+1,s.length);return usCurrencyConverter(p1+p2);}return parseFloat(n);}
function addClassName(el, sClassName) {var s = el.className;var p = s.split(" ");var l = p.length;for (var i = 0; i < l; i++) {if (p[i] == sClassName)return;}p[p.length] = sClassName;el.className = p.join(" ");}
function removeClassName(el, sClassName) {var s = el.className;var p = s.split(" ");var np = [];var l = p.length;var j = 0;for (var i = 0; i < l; i++) {if (p[i] != sClassName)np[j++] = p[i];}el.className = np.join(" ");}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一卡二卡三卡国产欧美| 精品亚洲成a人| 亚洲综合图片区| 久久99精品国产.久久久久| 91福利视频网站| 中文av一区特黄| 久草精品在线观看| 欧美一区二区三区视频在线观看| 亚洲欧美综合网| 顶级嫩模精品视频在线看| 欧美一级精品大片| 午夜激情综合网| 欧美无砖砖区免费| 一区二区欧美精品| 99久久婷婷国产综合精品| 2022国产精品视频| 日本视频中文字幕一区二区三区| 日本久久一区二区| 中文字幕在线一区免费| 国产成人精品1024| 精品精品国产高清a毛片牛牛| 亚洲成av人在线观看| 色先锋资源久久综合| 国产精品久久久久久久久久久免费看| 国内成人自拍视频| 久久婷婷一区二区三区| 韩国精品主播一区二区在线观看| 欧美一级一级性生活免费录像| 一区二区三区四区不卡视频| 色婷婷综合久久久中文字幕| 亚洲欧美一区二区在线观看| 97久久精品人人做人人爽50路| 国产精品午夜在线观看| 国产91精品精华液一区二区三区| 欧美极品少妇xxxxⅹ高跟鞋| 岛国精品在线观看| 日本一区二区高清| 99久久精品国产一区二区三区| 中文字幕中文乱码欧美一区二区| 91在线丨porny丨国产| 日韩理论片在线| 在线免费观看不卡av| 亚洲成人免费av| 日韩欧美一区电影| 国产精品系列在线播放| 国产精品视频免费看| 91麻豆蜜桃一区二区三区| 亚洲一区在线视频| 日韩欧美一级精品久久| 国产成人精品亚洲日本在线桃色| 亚洲欧美激情小说另类| 色婷婷av一区二区三区之一色屋| 亚洲欧美日韩国产综合在线| 欧美久久久久免费| 国产一区二区h| 国产精品久久久久久久浪潮网站| 日本电影亚洲天堂一区| 日韩在线观看一区二区| 久久久噜噜噜久久人人看 | 国产精品自在在线| 亚洲丝袜精品丝袜在线| 337p亚洲精品色噜噜狠狠| 黑人巨大精品欧美一区| 亚洲激情五月婷婷| 日韩一区二区中文字幕| 豆国产96在线|亚洲| 一区二区日韩电影| 26uuu成人网一区二区三区| 色天使色偷偷av一区二区| 日本美女一区二区三区视频| 国产精品美女一区二区| 欧美一区二区三区免费大片| 成人激情小说网站| 免费国产亚洲视频| 亚洲视频狠狠干| 精品国产91久久久久久久妲己| 北岛玲一区二区三区四区| 日韩—二三区免费观看av| 一级日本不卡的影视| 久久精品水蜜桃av综合天堂| 欧美日韩国产精选| 99这里只有精品| 激情综合一区二区三区| 亚洲福利电影网| 国产精品久久久久久久久久久免费看 | 色天使色偷偷av一区二区| 久久国产福利国产秒拍| 亚洲自拍偷拍欧美| 国产精品三级av在线播放| 欧美变态tickle挠乳网站| 欧洲另类一二三四区| av一区二区久久| 国产一区二区三区国产| 视频一区二区三区中文字幕| 亚洲精品免费播放| 日韩美女久久久| 久久精品一区蜜桃臀影院| 日韩视频免费观看高清完整版在线观看 | 欧美一区二区三区在| 91视频xxxx| 99国产精品国产精品久久| 成人美女视频在线观看18| 国产精品18久久久久久久网站| 日本vs亚洲vs韩国一区三区| 亚洲午夜精品17c| 亚洲精品网站在线观看| 亚洲欧洲色图综合| 17c精品麻豆一区二区免费| 国产精品麻豆欧美日韩ww| 国产精品色哟哟| 国产精品无遮挡| 国产网红主播福利一区二区| 久久久久国产一区二区三区四区 | 国产**成人网毛片九色| 国产麻豆一精品一av一免费| 精品一区二区三区免费观看| 美女在线观看视频一区二区| 麻豆精品蜜桃视频网站| 久久99久久久久| 国产成人自拍在线| 高清不卡一区二区在线| aaa亚洲精品| 色激情天天射综合网| 欧美综合在线视频| 91精品国产综合久久久蜜臀粉嫩| 日韩一区二区精品葵司在线| 91精品麻豆日日躁夜夜躁| 日韩久久免费av| 国产拍欧美日韩视频二区| 国产精品入口麻豆原神| 亚洲一区二区三区四区在线免费观看 | 国产精品素人一区二区| 亚洲图片欧美激情| 亚洲国产欧美日韩另类综合| 爽好久久久欧美精品| 美女网站视频久久| 国产999精品久久久久久| 99re亚洲国产精品| 3atv在线一区二区三区| 国产日韩欧美不卡在线| 一区二区三区高清在线| 日韩精品久久理论片| 风流少妇一区二区| 欧美性猛交xxxxxxxx| 久久综合色8888| 亚洲美女偷拍久久| 久久99久久久欧美国产| www.一区二区| 91精品国产综合久久精品性色| 久久久久久久综合| 亚洲国产视频在线| 丰满亚洲少妇av| 欧美少妇性性性| 国产欧美一区二区在线观看| 亚洲国产精品一区二区www | 麻豆久久久久久| 91在线精品一区二区| 欧美一区中文字幕| 1区2区3区精品视频| 蜜臀av性久久久久蜜臀aⅴ| 99视频国产精品| 日韩久久久久久| 亚洲一区二区三区影院| 成人精品视频一区二区三区尤物| 欧美男同性恋视频网站| 国产精品国产三级国产有无不卡| 丝袜诱惑制服诱惑色一区在线观看 | 97久久超碰国产精品| 欧美岛国在线观看| 亚洲成人精品影院| 91玉足脚交白嫩脚丫在线播放| 日韩亚洲欧美综合| 一区二区三区四区激情| 成人少妇影院yyyy| 精品88久久久久88久久久| 婷婷久久综合九色国产成人 | 成人av综合在线| 日韩欧美一级二级三级久久久| 一区二区三区四区在线播放 | 国模大尺度一区二区三区| 欧美日本高清视频在线观看| 亚洲色图视频网| 99视频在线观看一区三区| 久久久久久电影| 国产一区二区91| 精品国产一区二区三区不卡 | 欧美电影在哪看比较好| 亚洲激情自拍视频| 91日韩一区二区三区| 中文字幕亚洲成人| 成人免费av在线| 亚洲欧洲一区二区在线播放| 成人网男人的天堂| 中文字幕一区二区三区在线播放 | 一区二区欧美视频| 91激情在线视频| 亚洲国产婷婷综合在线精品| 欧洲av一区二区嗯嗯嗯啊| 一区二区三区欧美久久| 97精品超碰一区二区三区|