本人拟做的一个在线的表格(可编辑,可直接保存)程序,做出来之后类似于Excel那种界面及操作方式。
即点即输入的现实很简单,用一个input,点击的时候放在被点击的单元格上面,这样就实现的即时输入。当input失去焦点时将文本框的值赋给之前被单击的单元格。
现在遇到的问题是,当页面上单元格数量少时,感觉不到异常。但当单元格数量增加到10000个(如表格=128行×128列)左右时,能明显感觉到延时,就是从点击单元格到单元格正确出现输入的数据,要大约0.5秒~甚至1秒的时间。
目前采用的单元格赋值的方法是,点击时保存单元格的id,输入完成时按id赋值。测试了一下,延迟最大的部分出现在给单元格赋值这个地方。
做来做去最终感觉javascript的性能难以应付类似的需求,我现在的做法是把单元格的数量控制在最小,5000个左右,但延迟还是明显的。
不知道有没有人做过类似的功能,或提供其他思路!
即点即输入的现实很简单,用一个input,点击的时候放在被点击的单元格上面,这样就实现的即时输入。当input失去焦点时将文本框的值赋给之前被单击的单元格。
现在遇到的问题是,当页面上单元格数量少时,感觉不到异常。但当单元格数量增加到10000个(如表格=128行×128列)左右时,能明显感觉到延时,就是从点击单元格到单元格正确出现输入的数据,要大约0.5秒~甚至1秒的时间。
目前采用的单元格赋值的方法是,点击时保存单元格的id,输入完成时按id赋值。测试了一下,延迟最大的部分出现在给单元格赋值这个地方。
做来做去最终感觉javascript的性能难以应付类似的需求,我现在的做法是把单元格的数量控制在最小,5000个左右,但延迟还是明显的。
不知道有没有人做过类似的功能,或提供其他思路!
把事件放到table上面
然后用e.target来找实际td
然后用一个input来复用给所有的table单元格这样的话性能就不是问题了
var target = event.target || event.srcElement;
input.parentNode
}不就是那个单元格了么?取单元格的时候用1楼的做法。
我的意思是试验下 自己获取坐标位置 和 获取e,target那个快
window.addEventListener('load',function(){
var input = document.createElement('input');
input.type = 'text';
input.addEventListener('blur',function(){
this.parentNode.innerHTML = input.value;
});
document.getElementsByTagName('table')[0].addEventListener('click',function(e){
if(e.target.nodeName.toLowerCase() !== 'td') {
return;
}
var td = e.target;
input.value = td.innerHTML;
td.innerHTML = '';
td.appendChild(input);
input.focus();
});
});
你可以试试这个,可以让单元格变得可输入,这样你就不用动态渲染input了
不过刚刚测试ie6下div支持该属性,td不支持
其他浏览器无问题