论坛首页 Web前端技术论坛

[原创]可以让table支持手动调节列宽的js(ie only)

浏览 16457 次
该帖已经被评为良好帖
作者 正文
   发表时间:2006-11-02  
这是几个月前写的东西了
现在看起来真差
但还是发上来吧


这个project可以让你的 [现有] 的列表table 在[几乎不用修改]的情况下,
自动支持手动调节列宽的功能。完全基于DHTML前台技术,与服务器端无关。
 
通常情况下 你真正要做的工作只是(当然还有更高级的用法,说明晚些时候奉上)

1 引入脚本
<SCRIPT language="javascript" src="mycommon.js"></SCRIPT>
<SCRIPT language="javascript" src="mylisttable.js"></SCRIPT>
2 在页面初始化方法里执行:
新建 MyListTableManager 对象,并初始化:
window.demoManager=new MyListTableManager();
demoManager.initDefaultStyle();
将你自己的table id告诉刚刚创建的 MyListTableManager 对象:
demoManager.addNewMyListTable("你的列表table的id");



注意:
0 目前只支持IE 6。 IE其他版本未测试。暂时不支持FireFox浏览器。
1 不管如今AJAX RIA RCP这些东西如何流行,用js来实现的展现层不可能达到用C写的GUI程序的水平,所以期望值不要太高:)。
2 测试中,肯定还有很多bug...
   发表时间:2006-11-04  
呵呵,怎跟我计划写的东东一个方向的。

支持一下:
function startsWith(str,start,iCase,iShift){
		if (isValid(iShift) && iShift)
		{
			str=ignoreSHIFT(str);
			start=ignoreSHIFT(start);
		}
		var flags ="";		
		if (isValid(iCase) && iCase)
		{
			flags = "i";
		}

		var reg = new RegExp("^"+start+".*",flags);
		return reg.test(str);
}
function ignoreSHIFT(str){
	var mapping={
		"!" : "1",
		"@" : "2",
		"#" : "3",
		"\\$" : "4",
		"%" : "5",
		"\\^" : "6",
		"&" : "7",
		"\\*" : "8",
		"\\(" : "9",
		"\\)" : "0",
		"~" : "`",
		"_" : "-",
		"\\+" : "=",
		"\\{" : "[",
		"}" : "]",
		":" : ";",
		">" : ".",
		"<" : ",",
		"\\?" : "/",
		"\\\"" : "'",
		"\\|" : "\\"
	};
	
	
	var reg = new RegExp("","");
	for (var k in mapping){		
		reg.compile(k,"g");
		str = str.replace(reg,mapping[k]);	
	}
	return str;
	/* 考虑用正则表达式 */
	/*
	var newStr="";
	for (var i=0;i<str.length ;i++ ){
		var c=str.charAt(i);
		for (var k in mapping){
			if (c==k){
				c=mapping[k];
				break;
			}
		}
		newStr+=c;
	}	
	return newStr;
	*/
	
}
alert(ignoreSHIFT("~!@#$%^&*()_+|{}:\"<>?"));


上述代码没经长细测试,所以如果有bug实属正常:)。
0 请登录后投票
   发表时间:2006-11-04  
function startsWith(str,start,iCase,iShift){
		if (isValid(iShift) && iShift)
		{
			str=ignoreSHIFT(str);
			start=ignoreSHIFT(start);
		}
		var flags ="";		
		if (isValid(iCase) && iCase)
		{
			flags = "i";
		}

		var reg = new RegExp("^"+start+".*",flags);
		return reg.test(str);
}
function ignoreSHIFT(str){
	var mapping={
		"!" : "1",
		"@" : "2",
		"#" : "3",
		"\\$" : "4",
		"%" : "5",
		"\\^" : "6",
		"&" : "7",
		"\\*" : "8",
		"\\(" : "9",
		"\\)" : "0",
		"~" : "`",
		"_" : "-",
		"\\+" : "=",
		"\\{" : "[",
		"}" : "]",
		":" : ";",
		">" : ".",
		"<" : ",",
		"\\?" : "/",
		"\\\"" : "'",
		"\\|" : "\\"
	};
	
	
	var reg = new RegExp("","");
	for (var k in mapping){		
		reg.compile(k,"g");
		str = str.replace(reg,mapping[k]);	
	}
	return str;
	/* 考虑用正则表达式 */
	/*
	var newStr="";
	for (var i=0;i<str.length ;i++ ){
		var c=str.charAt(i);
		for (var k in mapping){
			if (c==k){
				c=mapping[k];
				break;
			}
		}
		newStr+=c;
	}	
	return newStr;
	*/
	
}
alert(ignoreSHIFT("~!@#$%^&*()_+|{}:\"<>?"));


怀疑这段代码的效率

一段简化的startsWith
String.prototype.startsWith = function(pf) {
    pf = typeof(pf) != "string" ? "" + pf : pf;
    return this.indexOf(pf) == 0;
}
0 请登录后投票
   发表时间:2006-11-04  
看看这个:
http://makoomba.altervista.org/grid/
基于jquery的。不错。可惜没文档,难直接重用。
我拿来用了,并且做了些修改,变得更实用,而且也可以重复使用。等做完之后,贴个修改的版本上来。
0 请登录后投票
   发表时间:2006-11-04  
[quote="gp03d]
怀疑这段代码的效率

一段简化的startsWith
String.prototype.startsWith = function(pf) {
    pf = typeof(pf) != "string" ? "" + pf : pf;
    return this.indexOf(pf) == 0;
}


事实上我只是看到LZ的ignoreSHIFT方法上注明准备用正则,我就随手写了一个。
呵呵,startsWith的改写是我顺手用正则表达式改了一下。
至于效率你测试了你的比我的快了吗?

当然,放到String.prototype是一个好的方法!
0 请登录后投票
   发表时间:2006-11-05  
startsWith
等方法实际上在这个组件中没有用上
0 请登录后投票
   发表时间:2006-11-07  
liuyxit 写道
[quote="gp03d]
怀疑这段代码的效率

一段简化的startsWith
String.prototype.startsWith = function(pf) {
    pf = typeof(pf) != "string" ? "" + pf : pf;
    return this.indexOf(pf) == 0;
}


事实上我只是看到LZ的ignoreSHIFT方法上注明准备用正则,我就随手写了一个。
呵呵,startsWith的改写是我顺手用正则表达式改了一下。
至于效率你测试了你的比我的快了吗?

当然,放到String.prototype是一个好的方法!


前几天我整理公司js的时候,测试过的~
用一个1W次的循环测试indexOf与RegExp的效率,发现indexOf能比RegExp方式节省近一半的时间。
不知道是否还有其他更加可靠的办法,如果有请告诉我:)
0 请登录后投票
   发表时间:2006-11-08  
正则这东西确实是把双忍剑
本身效率就不高 再加上正则表达式的写法也是比较有学问的
对大规模的字符串进行操作 正则确实不是好办法啊
0 请登录后投票
   发表时间:2006-11-17  
lz的效果看不到阿,

不过这个说得还不错啊

引用
看看这个:
http://makoomba.altervista.org/grid/
基于jquery的。不错。可惜没文档,难直接重用。
我拿来用了,并且做了些修改,变得更实用,而且也可以重复使用。等做完之后,贴个修改的版本上来。


就是不知道能不能作为一个独立的控件来用呢,可不可以一个页面上面显示多个表格呢,这个我觉得还是挺重要的问题
0 请登录后投票
   发表时间:2007-04-06  
呵呵,我也写过一个:
http://www.jiehoo.com/resizable-frame-and-table.htm
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics