前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >表格内,设置许多元素的大小时,js的速度慢的办法

表格内,设置许多元素的大小时,js的速度慢的办法

作者头像
申君健
发布2018-09-21 15:40:51
1.8K0
发布2018-09-21 15:40:51
举报
文章被收录于专栏:前端侠2.0

因为要做可编辑的表格,生成的表格结构如下:

代码语言:javascript
复制
<td class=" autoEdit" data-field="sex">
     <input class="autoEditinput" value="1" data-url="1111"  data-field="sex">
</td>

我要的最终效果是:

(粉色的是input)

但input与表格显得很不协调,要不撑得很大,要不就到td之外了。

思路1:设置td为relative,input为absolute,然后设置input大小为td的大小。

代码语言:javascript
复制
$input.css({ width: w + 'px', height: h + 'px' });

      结果,如果input很多,会卡几十秒。     1*

思路2:去js语句。  利用css,设置input的宽高为100%。

    结果,每个input好像都是159的宽度,整个表格会大,且把纯文字的列挤得很窄。也可能有正确的实现方法,但我试了一些都没成功。

思路3:必须用js的话,我先隐藏掉表或表body,然后再设置它的大小,设置完于显示表。是不是就不卡了呢?

 结果:用$.hide()方法,input就无法获取大小。设置visibility,虽然表格看不到,但依然很卡,速度没有提升  2*。  想想jquery还可以$.detach()后,再append进来。因为在函数内,我就把tbody给detach(),结果是所有的input都是159这么一个宽度,但各个表列还是上面那样,input全跑到表单元格之外了。   3*

思路4:由于隐藏或detach后,无法获得大小。所以第一次循环,先保存一下每个input大小 ,再隐藏或detach,此时来设置input的大小,就会消除table的抖动。最后再显示或append.

代码语言:javascript
复制
waitEdit.each 
    $input.data('w', w);
    $input.data('h', h);
 
tbl.hide(); 
waitEdit.each 
    $input.css({ width: $input.data('w') + 'px', height: $input.data('h') + 'px' });  
tbl.show();

此时1500个元素在chrome下1秒,在ie下2.7秒。在可接受的范围之内 了。

----------------------------------------------------------------------------------

1*:表明absolute元素仍然会影响table的布局。

2*:visibility虽然设为hidden,但实际仍引用table的reflow

3*:  当时是把tbody给detach了,然后设置input。肯定因为DOM结构不完整,而无法获取准确的大小造成失败。或许我把整个table给detach掉,让table在内存中是完整的,或许input的尺寸可能设置正确的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014/09/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档