Javascript jQuery show()、hide()和:visible选择器 函数showHide(showWhat){ 如果(showhat='a'){ $('.group-a').show(); $('.group-b、.group-c').has('input[type=“checkbox”]:checked').show(); $('.group-b、.group-c')。非(':has(输入[type=“checkbox”]:选中))。隐藏(); }else if(showhat==“b”){ $('.b组').show(); $('.group-a、.group-c').has('input[type=“checkbox”]:checked').show(); $('.group-a、.group-c')。非(':has(输入[type=“checkbox”]:选中))。隐藏(); }else if(showhat='c'){ $('.c组').show(); $('.group-a、.group-b').has('input[type=“checkbox”]:checked').show(); $('.group-a、.group-b')。非(':has(输入[type=“checkbox”]:选中))。隐藏(); }else if(showhat=='all'){ $('.a组、.b组、.c组').show(); } $('.none')。每个(函数(索引,元素){ if($(element).parent().children(':visible')。长度>1){ $(元素).hide(); }否则{ $(元素).show(); } }); } $(document).ready(showHide('all')); 显示: A组 B组 C组 全部的 未找到 A:福 A:酒吧 B:福 B:酒吧
JSFiddle: 我有一个包含多个组的列表,每个组由一个共享类标识。每个组中的项目都有一个复选框。列表中还有一项表示未显示其他项目 我有一个javascript方法,它过滤列表内容,以便显示指定组的项目,以及任何其他组的任何项目(如果选中) 如果在应用任何筛选器后,没有要显示的项目,则应显示“未找到”项目。如果有一个项目要显示,则应隐藏“未找到”项目 在大多数情况下,我的设计是可行的,但在少数情况下,当项目实际上已找到时,它会显示“未找到”消息 在我的JSFIDLE中,如果您选中一个项目,然后过滤到C组,那么将同时显示选中的项目和“未找到”项目 是否存在某种竞争条件或其他原因导致元素在实际可见时注册为不可见(反之亦然) }Javascript jQuery show()、hide()和:visible选择器 函数showHide(showWhat){ 如果(showhat='a'){ $('.group-a').show(); $('.group-b、.group-c').has('input[type=“checkbox”]:checked').show(); $('.group-b、.group-c')。非(':has(输入[type=“checkbox”]:选中))。隐藏(); }else if(showhat==“b”){ $('.b组').show(); $('.group-a、.group-c').has('input[type=“checkbox”]:checked').show(); $('.group-a、.group-c')。非(':has(输入[type=“checkbox”]:选中))。隐藏(); }else if(showhat='c'){ $('.c组').show(); $('.group-a、.group-b').has('input[type=“checkbox”]:checked').show(); $('.group-a、.group-b')。非(':has(输入[type=“checkbox”]:选中))。隐藏(); }else if(showhat=='all'){ $('.a组、.b组、.c组').show(); } $('.none')。每个(函数(索引,元素){ if($(element).parent().children(':visible')。长度>1){ $(元素).hide(); }否则{ $(元素).show(); } }); } $(document).ready(showHide('all')); 显示: A组 B组 C组 全部的 未找到 A:福 A:酒吧 B:福 B:酒吧,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,JSFiddle: 我有一个包含多个组的列表,每个组由一个共享类标识。每个组中的项目都有一个复选框。列表中还有一项表示未显示其他项目 我有一个javascript方法,它过滤列表内容,以便显示指定组的项目,以及任何其他组的任何项目(如果选中) 如果在应用任何筛选器后,没有要显示的项目,则应显示“未找到”项目。如果有一个项目要显示,则应隐藏“未找到”项目 在大多数情况下,我的设计是可行的,但在少数情况下,当项目实际上已找到时,它会显示“未找到”消息 在我的JSFIDLE中,如果您选中一个项目,然后
这里有一个更为直截了当的小提琴:我有点像个白痴。jQuery中没有任何bug或争用条件 如果我从用于决定是否显示“未找到”的选择器中排除了“未找到”元素,那么一切都按预期工作 而不是:
function showHide(showWhat) {
if (showWhat == "all")
{
$(".g").show();
}
else
{
$(".g").hide();
$(".group-" + showWhat).show();
$('.g').has('input[type="checkbox"]:checked').show();
}
$('.none').each(function(index, element) {
if ($(element).parent().children(':visible').length > 1) {
$(element).hide();
} else {
$(element).show();
}
});
我应该这样做:
if ($(element).parent().children(':visible').length > 1) {
这将始终排除“未找到”元素,并从列表中的其他元素中计数,以确定是否找到任何项。您的JSFIDLE无法使选中的元素可见。
if ($(element).parent().children(':visible').length > 1) {
if ($(element).parent().children(':visible:not(.none)').length > 0) {