gpt4 book ai didi

javascript - 在 jQuery UI 中使用效果时,早期 DOM 元素不会隐藏

转载 作者:行者123 更新时间:2023-12-03 01:33:26 28 4
gpt4 key购买 nike

这是我之前的问题 jQuery UI hiding not taking effect for early DOM elements 的后续问题。我几乎刚刚编辑了那个,但不想使 the accepted answer 无效。托夫勒.按照我写这个问题的方式,答案在技术上并没有错误,但它并不能解决我的问题。

回顾一下,我希望能够显示和隐藏 div 组。我显示给定组的策略是隐藏所有组(按类(class)选择),然后取消隐藏我想要的组(再次按类(class)选择)。

我的第一个问题的答案建议使用 jQuery UI 和核心 jQuery 中的 hide()show()/fadeIn() 。当我使用这些不带参数的函数时,隐藏按预期工作(由答案的片段证明)。

问题是,当我尝试重新添加效果类型(即 the hide() function 的第一个参数)时,事情再次中断;下面是 MCVE 片段。具体来说,当隐藏然后显示 DOM 中下方的一组元素时,DOM 中位于其上方的元素仍然可见。要从新加载的代码片段进行重现,请尝试单击“显示 A 组”之后的“显示 B 组”。 (让事情变得更加困惑的是,再次点击“显示 B 组”确实按预期工作。)

我想知道这是否与 jQuery UI - Dialog Hide Effect in Firefox - Flickering 中提到的底层 DOM 刷新行为有关。和 jQuery UI effect causes iframe reload ,但我自己没有 JS 能力。

是什么导致了这里的基本行为,以及如何让它工作,同时仍然能够使用效果(以及可能的其他参数)?

$(function() {
$("#showAll").on("click", function() {
$('.box').fadeIn();
});

$("#showA").on("click", function() {
$('.box').hide('clip');
$('.groupA').fadeIn();
});

$("#showB").on("click", function() {
$('.box').hide('clip');
$('.groupB').fadeIn();
});
});
.box {
border: 1px solid black;
}
<html>
<head>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>
<script type="text/javascript" src="https://code.jquery.com/ui/1.12.1/jquery-ui.js" integrity="sha256-T0Vest3yCU7pafRw9r+settMBX6JkKN06dqBnpQ8d30=" crossorigin="anonymous"></script>
</head>
<body>
<button id="showAll">Show all</button>
<button id="showA">Show group A</button>
<button id="showB">Show group B</button>

<div id="aOne" class="box groupA">
<h4>A1</h4>
</div>
<div id="aTwo" class="box groupA">
<h4>A2</h4>
</div>

<div id="bOne" class="box groupB">
<h4>B1</h4>
</div>
<div id="bTwo" class="box groupB">
<h4>B2</h4>
</div>
</body>
</html>

最佳答案

问题是 .hide() 期望事物可见,我认为它使它们可见然后剪辑它们。

所以我们只隐藏可见的项目:$(".box:visible")

$(function() {
$(".tools button").click(function(e) {
e.preventDefault();
var btn = $(this);
$(".box:visible").hide("clip", function() {
switch (btn.attr("id")) {
case "showAll":
$(".box").show();
break;
case "showA":
$(".A").show();
break;
case "showB":
$(".B").show();
break;
}
});
});
});
.box {
border: 1px solid black;
}
<script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>
<script type="text/javascript" src="https://code.jquery.com/ui/1.12.1/jquery-ui.js" integrity="sha256-T0Vest3yCU7pafRw9r+settMBX6JkKN06dqBnpQ8d30=" crossorigin="anonymous"></script>

<div class="tools">
<button id="showAll">Show all</button>
<button id="showA">Show group A</button>
<button id="showB">Show group B</button>
</div>
<div id="aOne" class="box A">
<h4>A1</h4>
</div>
<div id="aTwo" class="box A">
<h4>A2</h4>
</div>

<div id="bOne" class="box B">
<h4>B1</h4>
</div>
<div id="bTwo" class="box B">
<h4>B2</h4>
</div>

关于javascript - 在 jQuery UI 中使用效果时,早期 DOM 元素不会隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51193146/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com