使用jQuery迭代并有条件地隐藏多个元素

时间:2019-07-18 15:09:46

标签: jquery visible is-empty

if ( $("table tbody tr:visible").length === 0 ) { 
    $("table thead").hide();
} else {
    $("table thead").show();
}

我想隐藏所有thead元素中的table元素,其中所有tbody仅包含隐藏的tr元素。 上面的代码适用于一个表,但不适用于多个表。我有很多表,此代码一次搜索所有表中的所有tbody tr,而不是每个表都单独搜索。

我需要获取$("table").length并检查每个可见的tr吗?有没有更简单的解决方案?

2 个答案:

答案 0 :(得分:0)

您必须能够标识刚刚处理的表。我们可以使用以下各项来做到这一点:

$("table").each(){
   var myTable = $(this);  
   if ( myTable.find("tbody tr:visible").length === 0) { 
      myTable.find("thead").hide(); 
   } 
   else { 
      myTable.find("thead").show();  
   }
}

答案 1 :(得分:0)

您也可以在没有显式循环的情况下完成此操作。 jQuery的:has()选择器可以在一行中为您完成这项工作。

$("table:not(:has(tbody tr:visible)) thead").hide();

使用此方法,您可以直接查询其父表在其thead中不包含任何可见tr元素的所有tbody元素。

您可以在here中看到它。