javascriptʵÏÖµÄlistviewЧ¹û

¡¡¡¡<style type="text/css">

¡¡¡¡#oContainer {

¡¡¡¡width: 600px;

¡¡¡¡height: 500px;

¡¡¡¡border: 1px solid menu;

¡¡¡¡margin: 0px;

¡¡¡¡padding: 0px;

¡¡¡¡overflow: hidden;

¡¡¡¡}

¡¡¡¡a {

¡¡¡¡color: black;

¡¡¡¡text-decoration: none;

¡¡¡¡}

¡¡¡¡a:hover {

¡¡¡¡color: red;

¡¡¡¡text-decoration: underline;

¡¡¡¡}

¡¡¡¡</style>

¡¡¡¡<script language="javascript">

¡¡¡¡var oListView = new Object();

¡¡¡¡function listView(_container) {

¡¡¡¡this.author = '51JS.COM-ZMM';

¡¡¡¡this.version = 'ListView 1.0';

¡¡¡¡this.container = _container;

¡¡¡¡this.box = new Object();

¡¡¡¡this.headerWidth = 0;

¡¡¡¡this.headerHeight = 20;

¡¡¡¡this.itemWidth = 0;

¡¡¡¡this.itemHeight = 0;

¡¡¡¡this.rowsCount = 30;

¡¡¡¡this.isResize = false;

¡¡¡¡this.separate = new Object();

¡¡¡¡this.startPoint = 0;

¡¡¡¡this.endPoint = 0;

¡¡¡¡this.tempSeparate = new Object();

¡¡¡¡this.put_headerHeight = function(_height) { return _height; };

¡¡¡¡this.get_headerHeight = function() { return this.headerHeight; };

¡¡¡¡this.put_rowsCount = function(_count) { return _count; };

¡¡¡¡this.get_rowsCount = function() { return this.rowsCount; };

¡¡¡¡}

¡¡¡¡listView.prototype = {

¡¡¡¡boxInit : function() {

¡¡¡¡this.container.innerHTML = new String();

¡¡¡¡this.box = (function(_object) {

¡¡¡¡var _box = document.createElement('DIV');

¡¡¡¡with (_box) {

¡¡¡¡id = 'ListViewBox';

¡¡¡¡style.width = _object.offsetWidth;

¡¡¡¡style.height = _object.offsetHeight;

¡¡¡¡style.margin = '0px';

¡¡¡¡style.padding = '0px';

¡¡¡¡attachEvent('oncontextmenu', new Function('return false;'));

¡¡¡¡}

¡¡¡¡return _box;

¡¡¡¡})(this.container);

¡¡¡¡this.headerPanel = (function(_width, _height) {

¡¡¡¡var _headerPanel = document.createElement('DIV');

¡¡¡¡with (_headerPanel) {

¡¡¡¡style.width = _width;

¡¡¡¡style.height = _height;

¡¡¡¡}

¡¡¡¡return _headerPanel;

¡¡¡¡})(this.box.style.width, this.headerHeight);

¡¡¡¡this.headerPanel.appendChild(this.textPanel = (function() {

¡¡¡¡var  _textPanel = document.createElement('NOBR');

¡¡¡¡_textPanel.attachEvent('onmousemove', function() {

¡¡¡¡with (oListView) {

¡¡¡¡if (event.button == 1) {

¡¡¡¡textPanel.style.cursor = 'E-resize';

¡¡¡¡tempSeparate.style.left = event.clientX - getPosition(box).left;

¡¡¡¡tempSeparate.style.display = 'inline';

¡¡¡¡endPoint = event.clientX;

¡¡¡¡isResize = true;

¡¡¡¡}

¡¡¡¡}

¡¡¡¡});

¡¡¡¡return _textPanel;

¡¡¡¡})());

¡¡¡¡this.rowItemPanel = (function(_width, _height) {

¡¡¡¡var _itemPanel = document.createElement('DIV');

¡¡¡¡with (_itemPanel) {

¡¡¡¡style.width = _width;

¡¡¡¡style.height = _height;

¡¡¡¡style.overflow = 'hidden';

¡¡¡¡}

¡¡¡¡return _itemPanel;

¡¡¡¡})(this.box.style.width, parseInt(this.box.style.height) - this.headerHeight);

¡¡¡¡this.rowItemPanel.appendChild(this.dataPanel = (function() {

¡¡¡¡var  _dataPanel = document.createElement('NOBR');

¡¡¡¡with (_dataPanel) {

¡¡¡¡style.cursor = 'default';

¡¡¡¡attachEvent('onclick', function() {

¡¡¡¡document.selection.empty();

¡¡¡¡});

¡¡¡¡attachEvent('onselectstart', function() {

¡¡¡¡document.selection.empty();

¡¡¡¡});

¡¡¡¡}

¡¡¡¡return _dataPanel;

¡¡¡¡})());

¡¡¡¡this.dataPanel.appendChild(this.tempSeparate = (function(_height) {

¡¡¡¡var _tempSeparate = document.createElement('SPAN');

¡¡¡¡with (_tempSeparate) {

¡¡¡¡style.width = '1px';

¡¡¡¡style.height = _height;

¡¡¡¡style.border = '0px';

¡¡¡¡style.backgroundColor = 'black';

¡¡¡¡style.position = 'absolute';

¡¡¡¡style.display = 'none';

¡¡¡¡}

¡¡¡¡return _tempSeparate;

¡¡¡¡})(this.rowItemPanel.style.height));

¡¡¡¡this.box.appendChild(this.headerPanel);

¡¡¡¡this.box.appendChild(this.rowItemPanel);

¡¡¡¡this.container.appendChild(this.box);

¡¡¡¡},

¡¡¡¡drawListView : function(_headers, _aligns) {

¡¡¡¡this.boxInit();

¡¡¡¡this.drawHeader(_headers);

¡¡¡¡this.drawRowItem(_headers, _aligns);

¡¡¡¡document.attachEvent('onmouseup', this.finishResize);

¡¡¡¡},

¡¡¡¡drawHeader : function(_headers) {

¡¡¡¡this.headers = [];

¡¡¡¡this.headerWidth = Math.round((parseInt(this.headerPanel.style.width) - (_headers.length - 1) * 1) / _headers.length) + 1;

¡¡¡¡for (var i = 0; i < _headers.length; i ++) {

¡¡¡¡var _header = document.createElement('SPAN');

¡¡¡¡with (_header) {

¡¡¡¡style.width = this.headerWidth;

¡¡¡¡style.height = this.headerHeight;

¡¡¡¡style.overflow = 'hidden';

¡¡¡¡style.backgroundColor = 'buttonface';

¡¡¡¡style.borderLeft = '1px solid buttonhighlight';

¡¡¡¡style.borderTop = '1px solid buttonhighlight';

¡¡¡¡style.borderRight = '1px solid buttonshadow';

¡¡¡¡style.borderBottom = '1px solid buttonshadow';

¡¡¡¡style.textAlign = 'center';

¡¡¡¡style.fontSize = '12px';

¡¡¡¡style.fontFamily = 'Sans-Serif, Tahoma';

¡¡¡¡style.paddingTop = '1px';

¡¡¡¡innerText = _headers[i];

¡¡¡¡}

¡¡¡¡this.textPanel.appendChild(_header);

¡¡¡¡this.headers[this.headers.length] = _header;

¡¡¡¡var _separate = this.getSeparate(true);

¡¡¡¡this.textPanel.appendChild(_separate);

¡¡¡¡this.headers[this.headers.length] = _separate;

¡¡¡¡}

¡¡¡¡var _last = document.createElement('SPAN');

¡¡¡¡with (_last) {

¡¡¡¡style.width = this.headerPanel.offsetWidth;

¡¡¡¡style.height = this.headerHeight;

¡¡¡¡style.overflow = 'hidden';

¡¡¡¡style.backgroundColor = 'buttonface';

¡¡¡¡style.borderLeft = '1px solid buttonhighlight';

¡¡¡¡style.borderTop = '1px solid buttonhighlight';

¡¡¡¡style.borderRight = '1px solid buttonshadow';

¡¡¡¡style.borderBottom = '1px solid buttonshadow';

¡¡¡¡style.textAlign = 'center';

¡¡¡¡style.fontSize = '12px';

¡¡¡¡style.fontFamily = 'Sans-Serif, Tahoma';

¡¡¡¡style.paddingTop = '1px';

¡¡¡¡innerText = new String();

¡¡¡¡}

¡¡¡¡this.textPanel.appendChild(_last);

¡¡¡¡this.headers[this.headers.length] = _last;

¡¡¡¡},

¡¡¡¡drawRowItem : function(_headers, _aligns) {

¡¡¡¡this.items = [];

¡¡¡¡this.itemWidth = Math.round((parseInt(this.rowItemPanel.style.width) - (_headers.length - 1) * 1) / _headers.length) + 1;

¡¡¡¡this.itemHeight = parseInt(this.rowItemPanel.style.height) - 2;

¡¡¡¡for (var i = 0; i < _headers.length; i ++) {

¡¡¡¡var _item = document.createElement('SPAN');

¡¡¡¡with (_item) {

¡¡¡¡style.width = this.itemWidth;

¡¡¡¡style.height = this.itemHeight;

¡¡¡¡style.overflow = 'hidden';

¡¡¡¡style.padding = '0px';

¡¡¡¡appendChild((function(_count, _width, _height, _align) {

¡¡¡¡var _table = document.createElement('TABLE');

¡¡¡¡with (_table) {

¡¡¡¡cellSpacing = 0;

¡¡¡¡cellPadding = 0;

¡¡¡¡style.width = _width;

¡¡¡¡style.tableLayout = 'fixed';

¡¡¡¡}

¡¡¡¡var _tbody = document.createElement('TBODY');

¡¡¡¡for (var i = 0; i < _count; i ++) {

¡¡¡¡var _tableTr = document.createElement('TR');

¡¡¡¡var _tableTd = document.createElement('TD');

¡¡¡¡with (_tableTd) {

¡¡¡¡align = _align;

¡¡¡¡style.height = _height;

¡¡¡¡style.borderBottom = '1px solid #c6c3c6';

¡¡¡¡style.fontSize = '12px';

¡¡¡¡style.paddingLeft = '3px';

¡¡¡¡setAttribute('onclick', function() {

¡¡¡¡oListView.selectedRow(this.parentNode.rowIndex);

¡¡¡¡});

¡¡¡¡setAttribute('ondblclick', function() {

¡¡¡¡oListView.showSelected(this.parentNode.rowIndex);

¡¡¡¡});

¡¡¡¡innerHTML = new String(' ');

¡¡¡¡}

¡¡¡¡_tableTr.appendChild(_tableTd);

¡¡¡¡_tbody.appendChild(_tableTr);

¡¡¡¡}

¡¡¡¡_table.appendChild(_tbody);

¡¡¡¡return _table;

¡¡¡¡})(this.rowsCount, this.itemWidth, Math.round(this.itemHeight / this.rowsCount), _aligns[i]));

¡¡¡¡}

¡¡¡¡this.dataPanel.appendChild(_item);

¡¡¡¡this.items[this.items.length] = _item;

¡¡¡¡var _separate = this.getSeparate(false);

¡¡¡¡_separate.style.height = this.itemHeight;

¡¡¡¡this.dataPanel.appendChild(_separate);

¡¡¡¡this.items[this.items.length] = _separate;

¡¡¡¡}

¡¡¡¡var _last = document.createElement('SPAN');

¡¡¡¡with (_last) {

¡¡¡¡style.width = this.rowItemPanel.offsetWidth;

¡¡¡¡style.height = this.itemHeight;

¡¡¡¡style.overflow = 'hidden';

¡¡¡¡style.padding = '0px';

¡¡¡¡appendChild((function(_count, _width, _height) {

¡¡¡¡var _table = document.createElement('TABLE');

¡¡¡¡with (_table) {

¡¡¡¡cellSpacing = 0;

¡¡¡¡cellPadding = 0;

¡¡¡¡style.width = '100%';

¡¡¡¡}

¡¡¡¡var _tbody = document.createElement('TBODY');

¡¡¡¡for (var i = 0; i < _count; i ++) {

¡¡¡¡var _tableTr = document.createElement('TR');

¡¡¡¡var _tableTd = document.createElement('TD');

¡¡¡¡with (_tableTd) {

¡¡¡¡style.height = _height;

¡¡¡¡style.borderBottom = '1px solid menu';

¡¡¡¡innerHTML = new String('<nobr style="height: ' + eval(_height-1) + ';overflow: hidden;"> </nobr>');

¡¡¡¡}

¡¡¡¡_tableTr.appendChild(_tableTd);

¡¡¡¡_tbody.appendChild(_tableTr);

¡¡¡¡}

¡¡¡¡_table.appendChild(_tbody);

¡¡¡¡return _table;

¡¡¡¡})(this.rowsCount, this.itemWidth, Math.round(this.itemHeight / this.rowsCount)));

¡¡¡¡}

¡¡¡¡this.dataPanel.appendChild(_last);

¡¡¡¡this.items[this.items.length] = _last;

¡¡¡¡},

¡¡¡¡getSeparate : function(_resize) {

¡¡¡¡var _separate = document.createElement('SPAN');

¡¡¡¡with (_separate) {

¡¡¡¡style.width = _resize ? '2px' : '1px' ;

¡¡¡¡style.height = this.headerHeight;

¡¡¡¡style.border = '1px ' + (_resize ? 'inset white' : 'solid #c6c3c6');

¡¡¡¡style.overflow = 'hidden';

¡¡¡¡style.position = 'absolute';

¡¡¡¡if (_resize) {

¡¡¡¡attachEvent('onmousedown', function() {

¡¡¡¡with (oListView) {

¡¡¡¡separate = event.srcElement;

¡¡¡¡startPoint = event.clientX;

¡¡¡¡}

¡¡¡¡});

¡¡¡¡attachEvent('onmouseenter', function() {

¡¡¡¡event.srcElement.style.cursor = 'E-resize';

¡¡¡¡});

¡¡¡¡}

¡¡¡¡}

¡¡¡¡return _separate;

¡¡¡¡},

¡¡¡¡getPosition : function(_object) {

¡¡¡¡var _top = _left = 0;

¡¡¡¡var _root = document.body;

¡¡¡¡while (_object != _root) {

¡¡¡¡_left += _object.offsetLeft;

¡¡¡¡_object = _object.offsetParent;

¡¡¡¡}

¡¡¡¡return { left: _left };

¡¡¡¡},

¡¡¡¡resizeItem : function() {

¡¡¡¡with (this) {

¡¡¡¡var _width, _movePart = endPoint - startPoint;

¡¡¡¡for (var i = 0; i < headers.length; i ++) {

¡¡¡¡if (headers[i] == separate) {

¡¡¡¡var _bool = true;

¡¡¡¡_bool = _bool && (_movePart < 0);

¡¡¡¡_bool = _bool && (parseInt(headers[i - 1].style.width) < Math.abs(_movePart));

¡¡¡¡if (_bool) {

¡¡¡¡headers[i - 1].style.width = 0;

¡¡¡¡items[i - 1].style.width = 0;

¡¡¡¡} else {

¡¡¡¡_width = parseInt(headers[i - 1].style.width);

¡¡¡¡headers[i - 1].style.width = _width + _movePart;

¡¡¡¡_width = parseInt(items[i - 1].style.width);

¡¡¡¡items[i - 1].style.width = _width + _movePart;

¡¡¡¡_width = parseInt(items[i - 1].firstChild.style.width);

¡¡¡¡items[i - 1].firstChild.style.width = _width + _movePart;

¡¡¡¡var _table = items[i - 1].firstChild;

¡¡¡¡for (var j = 0; j < _table.rows.length; j ++) {

¡¡¡¡var _dataPanel = _table.rows[j].cells[0].children[0];

¡¡¡¡if (typeof _dataPanel != 'undefined') {

¡¡¡¡_width = parseInt(_dataPanel.style.width);

¡¡¡¡_dataPanel.style.width = _width + _movePart;

¡¡¡¡}

¡¡¡¡}

¡¡¡¡}

¡¡¡¡}

¡¡¡¡}

¡¡¡¡}

¡¡¡¡},

¡¡¡¡finishResize : function() {

¡¡¡¡with (oListView) {

¡¡¡¡if (isResize) {

¡¡¡¡isResize = false;

¡¡¡¡textPanel.style.cursor = 'default';

¡¡¡¡tempSeparate.style.display = 'none';

¡¡¡¡resizeItem();

¡¡¡¡}

¡¡¡¡}

¡¡¡¡},

¡¡¡¡addListItem : function(_datas) {

¡¡¡¡var _itemNum = _datas.length > this.rowsCount ? this.rowsCount : _datas.length ;

¡¡¡¡for (var i = 0; i < _itemNum; i ++) {

¡¡¡¡var n = 0;

¡¡¡¡for (j = 0; j < this.items.length - 2; j ++) {

¡¡¡¡if (j % 2 == 0) {

¡¡¡¡var _dataPanel = document.createElement('NOBR');

¡¡¡¡var _tableCell = this.items[j].firstChild.rows[i].cells[0];

¡¡¡¡with (_dataPanel) {

¡¡¡¡style.width = this.itemWidth;

¡¡¡¡style.overflow = 'hidden';

¡¡¡¡style.textOverflow = 'ellipsis';

¡¡¡¡innerHTML = _datas[i][n];

¡¡¡¡}

¡¡¡¡_tableCell.innerHTML = new String();

¡¡¡¡_tableCell.appendChild(_dataPanel);

¡¡¡¡_tableCell.title = _datas[i][0];

¡¡¡¡n ++;

¡¡¡¡}

¡¡¡¡}

¡¡¡¡}

¡¡¡¡},

¡¡¡¡selectedRow : function(n) {

¡¡¡¡for (var i = 0; i < this.items.length; i++) {

¡¡¡¡if (i % 2 == 0) {

¡¡¡¡var _table = this.items[i].firstChild;

¡¡¡¡for (var j = 0; j < _table.rows.length; j ++) {

¡¡¡¡var _dataPanel = _table.rows[j].cells[0].children[0];

¡¡¡¡if (typeof _dataPanel != 'undefined') {

¡¡¡¡if (j == n) {

¡¡¡¡_table.rows[j].cells[0].style.color = 'highlighttext';

¡¡¡¡_table.rows[j].cells[0].style.backgroundColor = 'highlight';

¡¡¡¡} else {

¡¡¡¡_table.rows[j].cells[0].style.color = '';

¡¡¡¡_table.rows[j].cells[0].style.backgroundColor = '';

¡¡¡¡}

¡¡¡¡var _children = _table.rows[j].cells[0].firstChild.children;

¡¡¡¡this.changeChild(_children, j == n);

¡¡¡¡}

¡¡¡¡}

¡¡¡¡}

¡¡¡¡}

¡¡¡¡},

¡¡¡¡changeChild : function(_children, _isSelected) {

¡¡¡¡if (typeof _children != 'undefined') {

¡¡¡¡for (var i = 0; i < _children.length; i ++) {

¡¡¡¡if (_isSelected) {

¡¡¡¡_children[i].style.color = 'highlighttext';

¡¡¡¡_children[i].style.backgroundColor = 'highlight';

¡¡¡¡} else {

¡¡¡¡_children[i].style.color = '';

¡¡¡¡_children[i].style.backgroundColor = '';

¡¡¡¡}

¡¡¡¡}

¡¡¡¡} else {

¡¡¡¡return false;

¡¡¡¡}

¡¡¡¡},

¡¡¡¡showSelected : function(n) {

¡¡¡¡var _text = new String();

¡¡¡¡for (var i = 0; i < this.items.length - 2; i++) {

¡¡¡¡if (i % 2 == 0) {

¡¡¡¡var _table = this.items[i].firstChild;

¡¡¡¡_text += this.headers[i].innerText + ':\n';

¡¡¡¡_text += _table.rows[n].cells[0].firstChild.innerHTML + '\n\n';

¡¡¡¡}

¡¡¡¡}

¡¡¡¡alert(_text);

¡¡¡¡}

¡¡¡¡}

¡¡¡¡function initListView() {

¡¡¡¡var _headers = [];

¡¡¡¡_headers[_headers.length] = '±êÌâ';

¡¡¡¡_headers[_headers.length] = 'ÄÚÈÝ';

¡¡¡¡_headers[_headers.length] = 'ʱ¼ä';

¡¡¡¡_headers[_headers.length] = '¹ÜÀí';

¡¡¡¡var _aligns = [];

¡¡¡¡_aligns[_aligns.length] = 'left';

¡¡¡¡_aligns[_aligns.length] = 'left';

¡¡¡¡_aligns[_aligns.length] = 'center';

¡¡¡¡_aligns[_aligns.length] = 'center';

¡¡¡¡oListView = new listView(self.oContainer);

¡¡¡¡oListView.drawListView(_headers, _aligns);

¡¡¡¡var _items = [];

¡¡¡¡_items[_items.length] = ['±êÌâÒ»', 'ÄÚÈÝÒ»', '2006-6-21 10:30:00', '<a href="update.aspx">±à¼­</a>  <a href="delete.aspx">ɾ³ý</a>'];

¡¡¡¡_items[_items.length] = ['±êÌâ¶þ', 'ÄÚÈݶþ', '2006-6-21 14:20:12', '<a href="update.aspx">±à¼­</a>  <a href="delete.aspx">ɾ³ý</a>'];

¡¡¡¡_items[_items.length] = ['±êÌâÈý', 'ÄÚÈÝÈý', '2006-6-21 20:45:36', '<a href="update.aspx">±à¼­</a>  <a href="delete.aspx">ɾ³ý</a>'];

¡¡¡¡oListView.addListItem(_items);

¡¡¡¡}

¡¡¡¡attachEvent('onload', initListView);

¡¡¡¡</script>

¡¡¡¡<center>

¡¡¡¡<div id="oContainer"></div>

¡¡¡¡</center>