jQuery v3.3.1的BUG以及解决办法(附解决方案)

发现问题

最新版的 FineUIPro v5.2.0 中,我们将内置的 jQuery v1.12.4 升级到 jQuery v3.3.1 ,可以看升级记录:

+升级到jQuery v3.3.1。
    -jQuery v3.x支持的浏览器:Chrome,Edge,Firefox,Safari,IE9+。
    -增加类型JSLibrary枚举值JQv1,用来引入jQuery v1.x。
    -如果需要支持IE8,请在Web.config中增加配置项JSLibrary=JQv1。
    -IE8有限支持并且复杂页面可能会有性能问题,建议大家积极引导用户使用现代浏览器。

之所以做这个升级,主要考虑如下因素:

1. IE8的市场份额逐渐萎缩,可以考虑将IE8的支持放到次要位置

2. 通过全部配置参数 JSLibrary=JQv1 引入老版本的 jQuery v1.12.4,这样老客户仍然可以支持IE8

3. 默认使用 jQuery v3.3.1,紧跟jQuery版本意味着较好的性能和安全性,以及遇到问题能够及时解决

4. 考虑到 jQuery 这么多年的发展,稳定性应该不是问题

整个升级过程还是很平缓的,没有大的改动。

唯一让我头疼的时,好像表格中节点的位置总计算不对,比如在表格的单元格编辑时,如果表格没有滚动条,显示的编辑框是正确的:

但是,表格的滚动条一出现,编辑框就错位了:

而这个问题,在使用 jQuery v1.12.4 时是不存在的!

分析问题

经过一段时间的调试,最终确定这是最新版 jQuery v3.3.1 的一个BUG,出现这个问题需满足如下条件:

1. 引用最新版 jQuery v3.3.1

2. 计算表格 tr 或者 td 的相对位置时出错,比如:$('table tr:eq(1) td(0)').position()

为了更直观的演示这个问题,我写了个例子,其中HTML代码块:

但是,表格的滚动条一出现,编辑框就错位了:

而这个问题,在使用 jQuery v1.12.4 时是不存在的!

分析问题

经过一段时间的调试,最终确定这是最新版 jQuery v3.3.1 的一个BUG,出现这个问题需满足如下条件:

1. 引用最新版 jQuery v3.3.1

2. 计算表格 tr 或者 td 的相对位置时出错,比如:$('table tr:eq(1) td(0)').position()

为了更直观的演示这个问题,我写了个例子,其中HTML代码块:

<div class="container">
  <table>
    <tr>
      <td>row-1</td>
    </tr>
    <tr>
      <td id="theTD">row-2</td>
    </tr>
  </table>
</div>
<div id="result">
</div>
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » jQuery v3.3.1的BUG以及解决办法(附解决方案)