“唯一可见的孩子”元素?

Posted

技术标签:

【中文标题】“唯一可见的孩子”元素?【英文标题】:The "only-visible-child" element? 【发布时间】:2012-12-21 03:57:54 【问题描述】:

我有一个很大的外部 div,里面有许多相同的圆圈(这是一个较小的 div,边框半径为 100%)

当用户单击它们时,我正在使用 jquery 淡出这些圆圈,但是我想在单击唯一剩余的圆圈时添加其他事件。

:last-child:nth-child() 不会有帮助,因为我不介意点击哪个圆圈,直到只剩下一个圆圈.


同样,这些元素是FADED OUT,所以它们仍然是可见元素的兄弟。所以我需要的是选择“最后一个可见的”元素。

<div>

<div class="circle"></div>

<div class="circle"></div>

<div class="circle"></div>

<div class="circle"></div>

<div class="circle"></div>

<div class="circle"></div>

<div class="circle"></div>

<div class="circle"></div>

</div>

$(document).ready(function()
    $(".circle").click(function()
        $(this).fadeOut("slow");
    );
    $("XXX").click(function()
        alert("I was the last of Mohicans");
    );
);

【问题讨论】:

向我们展示您的代码...或者 jsfiddle 可能是 为什么不向我们展示一些示例源代码?帮助你会更容易。 【参考方案1】:
$(document).ready(function () 
  $(".circle").click(function () 
   var $this = $(this);
   $this.fadeOut("slow");
   if ($this.siblings(':visible').length === 0) 
     alert("I was the last of Mohicans");
   
 );
);

计算可见的兄弟姐妹是最好的选择... 如果需要,还可以添加类选择器..

【讨论】:

【参考方案2】:

为什么不

.circle:first-child:last-child 

?

编辑已编辑的问题:

如果你想在点击时测试元素是否是唯一可见的,你可以这样做:

$(document).ready(function()
    $(".circle").click(function()
        $(this).fadeOut("slow");
        if ($('.circle:visible').length>1) return; // returns if not the last one
        alert("I was the last of Mohicans");
    );
);

【讨论】:

当然这对于选择唯一的孩子来说很好,但我的问题不正确,所以我编辑了它。 为什么你有两次$(".circle").click(function()?我不知道 jQuery 可以做到这一点? 我有它,因为它是 OP 的问题。但是是的,这是可能的,并且 jQuery 保证执行顺序是插入顺序。 工作得很好!谢谢【参考方案3】:

解决方法是为这些 div 增加一个额外的类,并且只有一个孩子。当 $(".extraclass :only-child") 被点击而不是添加你的新事件。否则删除你的额外类并应用淡出效果。

【讨论】:

【参考方案4】:

jQuery 实际上有一个only-child 选择器,见这里:http://api.jquery.com/only-child-selector/

(希望我已经正确理解了您的要求)

鉴于对问题的修改,请参见下文:

也许你应该尝试这样的事情:

$(document).ready(function()
    $(".circle").click(function()
        var numCircles = $('.circle').length;
        var numFaded = $('.faded').length;
        if( (numCircles - numFaded) == 1 ) 
            alert("I was the last of Mohicans!");
        
        $(this).fadeOut("slow");
        $(this).addClass("faded");
    );
);

我意识到上述可能不是最佳的(我不是 javascript/jQuery 大师),但它应该相当快(只要您不添加很多圈子)并且它应该可以根据您的需要运行。

请记住,我没有测试过上述内容,希望如果它不起作用,至少应该让您朝着正确的方向前进,但如果您需要更多帮助,请在下方评论。

【讨论】:

@dystroy 好吧,也许我的问题不正确。这两个答案都提供了一种选择唯一子元素的有效方法,但是当我使用 fadeOut 时,元素仍保留在 html 文件中,因此它们都不会成为唯一的子元素。对不起,我以前不知道这一点。我将编辑问题以避免进一步混淆。 好的,我明白了,我会修改答案 修改了我的答案,希望这就是你想要的!

以上是关于“唯一可见的孩子”元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查元素是不是不是第一个孩子?

观察一个元素有多少个孩子?

python,xml:如何通过元素名称访问第三个孩子

CSS第n个孩子元素写法

jQuery each:如果元素是第一个孩子,否则

我可以使用 useRef 将对元素的引用传递给孩子吗?