javascript - jQuery 的显示/隐藏不适用于未附加到 DOM 的元素(3.0 中发现的重大更改)

标签 javascript jquery css jquery-3

我正在努力将大型应用程序从相当古老的 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 文件以按照旧方式运行? (我真的不想这样做)

更新:修复一次性情况很容易。但可能有数十个这样的调用,查找并修复所有这些调用需要付出巨大的努力,而且效率不高。

最佳答案

以下是 jquery 博客中的相关部分:

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

如果您需要默认隐藏某个元素,最好的方法是向该元素添加一个类名,例如“hidden”,并在样式表中定义要显示的类: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/

关于javascript - jQuery 的显示/隐藏不适用于未附加到 DOM 的元素(3.0 中发现的重大更改),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38316792/

相关文章:

javascript - Ajax 请求后如何释放内存

java - 如何在 Vaadin 中添加 CSS 内联?

javascript - 如何在单击jquery时交换图像

css - 样式滚动条 slider

javascript - 带数字的数据属性名称

javascript - 如何在 nodejs json2csv 中的现有 csv 文件中追加新行?

javascript - Chrome 使用 onload 和 load 函数抛出错误

javascript - 如何使用 jquery 在克隆表单上显示日历

jquery 效果突出显示在 asp.net 更新面板中不起作用

javascript - 使用 jquery 获取下拉列表的 json 数据不起作用