1

我正在努力将大型应用程序从非常古老的 1.11.2 升级到最新的 jQuery 3.0。我发现非常微妙的变化破坏了我们的一些功能:

当我们实例化一些复杂的小部件时,我们最初使用 css 隐藏了一些元素(不显示)。然后我们使用 show/hide 来显示元素。

但是在小部件附加到 DOM 之前可能会调用显示/隐藏。当未附加元素时,显示/隐藏在 1.11.2 中可以正常工作,但在 3.0.0 中无法正常工作。

演示:

.tabCompositeSearchWidget-ClearButton
{
    /* Clear button is initially hidden */
    display: none;
}

var e = document.createElement('div');
$(e).addClass('tabCompositeSearchWidget-ClearButton');
$(e).text('blah');
$(e).show();
$('#root').append($(e));
alert($(e).is(":visible"));

在旧版本中元素将可见并且警报会说true,在最近的版本中它将不可见并且警报会说false

很难找到所有这样的用法,我对解决这个问题的最佳方法很感兴趣:这里最好的解决方法是什么?手动修改 jquery.js 文件以使其以旧方式运行?(我真的不想这样做)

更新:修复一次性案例很容易。但是可能有数十个这样的电话,找到并修复所有这些电话需要付出巨大的努力,而且效果不佳。

4

2 回答 2

3

这是 jquery 博客的相关部分:

“如果样式表中的元素设置为 display: none,.show() 方法将不再覆盖它。所以迁移到 jQuery 3.0 的最重要规则是:不要使用样式表来设置默认显示:无,然后尝试使用 .show() - 或任何显示元素的方法,例如 .slideDown() 和 .fadeIn() - 使其可见。

如果您需要默认隐藏元素,最好的方法是在元素中添加一个类似“隐藏”的类名,并将该类定义为 display: none 在样式表中。然后,您可以使用 jQuery 的 .addClass() 和 .removeClass() 方法添加或删除该类来控制可见性。或者,您可以在元素显示在页面上之前对元素进行 .ready() 处理程序调用 .hide()。或者,如果您确实必须保留样式表默认值,您可以使用 .css("display", "block") (或适当的显示值)来覆盖样式表。

https://blog.jquery.com/2015/07/13/jquery-3-0-and-jquery-compat-3-0-alpha-versions-released/

于 2016-07-11T21:59:23.157 回答
-2

尝试 $('div') 代替 var e = document.createElement('div');

于 2016-07-11T22:05:36.440 回答