jQuery 淡出其他 div 的 li(除了被单击的那个)

发布于 2024-11-30 23:05:23 字数 1438 浏览 2 评论 0原文

我有一小段 jQuery 代码(在一些 SO 成员的帮助下),但它只是错过了我的最后一块拼图。我将尝试解释它是如何工作的以及它最终应该做什么。

所以前两行很简单,这隐藏了所有具有类名 .toggle_hide 的元素。

$(document).ready(function () {
        $('.toggle_hide').hide();

这行代码使得 div #background-absolute_content 内的 li 内的 span 元素可单击,因此我可以在其上拥有一个函数跨度标签。

    $("#background_absolute_content li span").css('cursor', 'pointer').click(function(){

在这里向我解释有点困难,但我会尝试。我真的不知道这对我的代码有什么作用,我认为它是某个东西的选择器?

var $this = $(this);

当单击 span 元素时,这部分会淡出一个具有 .toggle_hide 类的元素

                $('.toggle_hide').fadeOut(200, function(){ 

,并且在淡出完成后,淡入会启动,以便显示 div。它选择“this”内的div,我认为它是span所在的li。

                $this.next("div").fadeIn(200);
            });
    });
});

所以我想我已经解决了这个问题,但问题是需要显示的div在之前快速闪烁由于淡出而出现。因此,我需要一种方法来选择除包含当前 span 代码的元素之外的所有 li 元素,这样代码就不会影响(使其闪烁)内部的 div。但当然它需要显示......

我尝试在 jsFiddle 上模拟问题 http://jsfiddle.net/YpeeR/7/

完整代码,以便更好地查看。

$(document).ready(function () {
        $('.toggle_hide').hide();

    $("#background_absolute_content li span").css('cursor', 'pointer').click(function(){
        var $this = $(this);
                $('.toggle_hide').fadeOut(200, function(){ 
                $this.next("div").fadeIn(200);
            });
    });
});

I have this small piece of jQuery code (with help from some SOmembers) but it just misses that last piece of the puzzle for me. I'll try to explain how it works and what it should do eventually.

So the first 2 lines are easy, this hides all the elements with an classname .toggle_hide

$(document).ready(function () {
        $('.toggle_hide').hide();

This line of code makes that the span elements that are inside a li that's inside the div #background-absolute_content are clickable so I can have a function on that span tag.

    $("#background_absolute_content li span").css('cursor', 'pointer').click(function(){

Here it gets a little bit harder to explain for me but I'll try. I don't really know what this does for my code, I think it's an selector for something?

var $this = $(this);

When the span element is clicked this part fadeOut an element with the class .toggle_hide

                $('.toggle_hide').fadeOut(200, function(){ 

And after the fadeOut has been done this fadeIn kicks in so that the div is shown. And it selects the div that is inside "this" which I supose would be the li where the span is in.

                $this.next("div").fadeIn(200);
            });
    });
});

So I think I got that pretty much sorted out but the problem is that the div's that need be shown make a quick flash before apearing because of the fadeOut. So I need a way to select all the li elements except the one that has the current span code in it so the code won't affect (make it flash) the div that's inside. But ofcourse it needs to be shown...

I tried to simulate the problem on jsFiddle
http://jsfiddle.net/YpeeR/7/

Whole code for a better look.

$(document).ready(function () {
        $('.toggle_hide').hide();

    $("#background_absolute_content li span").css('cursor', 'pointer').click(function(){
        var $this = $(this);
                $('.toggle_hide').fadeOut(200, function(){ 
                $this.next("div").fadeIn(200);
            });
    });
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半边脸i 2024-12-07 23:05:23

这个锻炼会吗: http://jsfiddle.net/amantur/EjAcZ/6/

我有更改

$('.toggle_hide').fadeOut(200, function(){ 
     $this.next("div").fadeIn(200);
});

$('.toggle_hide').fadeOut(200);

$this.next("div").fadeIn(200);

var $this = $(this);
var $nxtDiv = $this.next("div");
$('.toggle_hide').not($nxtDiv).fadeOut(200);
$nxtDiv.toggle('slow');

这将首先隐藏除当前 div 之外的所有 div (当前显示一个,当前已隐藏)然后 show 切换点击的那个。

编辑:-我也更新了小提琴。

Will this workout: http://jsfiddle.net/amantur/EjAcZ/6/

I have changed:

$('.toggle_hide').fadeOut(200, function(){ 
     $this.next("div").fadeIn(200);
});

to

$('.toggle_hide').fadeOut(200);

$this.next("div").fadeIn(200);

var $this = $(this);
var $nxtDiv = $this.next("div");
$('.toggle_hide').not($nxtDiv).fadeOut(200);
$nxtDiv.toggle('slow');

This will first hide all divs (currently showing one, current one is already hidden) except current one and then show toggle the clicked one.

EDIT:- I have updated the fiddle also.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文