javascript - 如果选择选项后隐藏子级,如何隐藏父级 div

标签 javascript jquery html

如果在触摸选择选项后其子 div class="number"被隐藏,我将隐藏父 div class="letter"。 我尝试使用此处显示的脚本的最后几行来执行此操作。 为了更好地理解我需要什么,打开片段预览 html 文件,然后选择第一个选择中的所有字母和第二个选择中的数字 5。因为数字 5 没有插入到任何 Letter Div 中,所以所有 Div Letter 都应该被隐藏,但它们仍然显示并且是空的。

// function to manage select Letter    
$(document).ready(function(){
    $("#selectLetter").change(function(){
        $(this).find("option:selected").each(function(){
            var optionValueLetter = $(this).attr("value");
            if(optionValueLetter){
                 $(".letter").not("." + optionValueLetter).hide();
                $("." + optionValueLetter).show();
            } else{
                $(".letter").hide();
            }
        });
     }).change();
    
    
    
// function to manage select Number  
    $("#selectNumber").change(function(){
        $(this).find("option:selected").each(function(){
            var optionValueNumber = $(this).attr("value");
                if(optionValueNumber){
                    $(".number").not("." + optionValueNumber).hide();
                    $("." + optionValueNumber).show();
                } else{
                    $(".number").hide();
                }
            });
        }).change(); 
     
showAll(); // function to show all div   
        
}); // close $(document).ready(function()   
        
        
// show all div
function showAll(){   
    $(".letter , .number").show();
    }
    
// function to hide parentdiv letter if child div number is diplay="none"   
var children = $(".letter").children($('.number'));
       
    if($(children).css('display') === 'none'){
        $(".letter").hide();
    }else{
        $(".letter").show();
        }    
.letter{   
border-left:solid 10px;
border-bottom:solid 4px;
color:white;
border-color:#636c72;
background: #636c72;;
margin-left:10px;
margin-right:10px;
width:60%;
}  
    
.number{   
border-left:solid 10px;
border-bottom:solid 4px;
color:white;
border-color:lightblue;
background: rgba(44,159,215, 1);;
margin-left:0px;
width:90%;
} 
    
select{
margin-left:10px;    
width: 30%;
border-left: solid 3px;
border-bottom: 0px;
border-right: solid 0px;
border-color: #cbcbcb;
height: 3em;
color: white!important;
background-color: rgba(44,159,215, 1)!important;
}
    
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
    
<title>Test</title>
   
</head>

<body>
    

<select  id="selectLetter" > 
    <option value="letter">All Letter</option>
    <option value="a">Letter A</option> 
    <option value="b">Letter B</option>
    <option value="c">Letter C</option>
    <option value="d">Letter D</option>
</select>
               
      
<select  id="selectNumber"> 
    <option value="number"> All Number</option>
    <option value="1">Number 1</option>   
    <option value="2">Number 2</option>    
    <option value="3">Number 3</option>
    <option value="4">Number 4</option>
    <option value="5">Number 5</option> 
</select>
    
<div class="letter a" >
    <div class="title"><p> div LETTER A </p></div>
    <div class="number 1">  <p> Number 1</p> </div>
    <div class="number 1">  <p> Number 1</p> </div>
    <div class="number 2">  <p> Number 2</p> </div>
    <div class="number 3">  <p> Number 3</p> </div>
    <div class="number 4">  <p> Number 4</p> </div>
</div>
    
<div class="letter b" >
    <div class="title"><p> div LETTER B</p></div>
    <div class="number 1">  <p> Number 1</p> </div>
    <div class="number 1">  <p> Number 1</p> </div>
    <div class="number 2">  <p> Number 2</p> </div>
    <div class="number 3">  <p> Number 3</p> </div>
    <div class="number 4">  <p> Number 4</p> </div>
</div>
    
<div class="letter c" >
    <div class="title"><p> div LETTER C</p></div>
    <div class="number 1">  <p> Number 1</p> </div>
    <div class="number 2">  <p> Number 2</p> </div>
    <div class="number 3">  <p> Number 3</p> </div>
    <div class="number 4">  <p> Number 4</p> </div>
</div>
    
<div class="letter d" >
    <div class="title">  <p>div LETTER D</p> </div>
    </div>
    
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    

    
    
</body>

</html>

最佳答案

https://jsfiddle.net/sudarpochong/ap3z3r7s/

我简化了您的代码。

选择/下拉事件处理程序

$("#selectLetter").on("change", selectChangeEventHandler);
$("#selectNumber").on("change", selectChangeEventHandler);

函数selectChangeEventHandler

function selectChangeEventHandler(e) {
    var selectedLetter = "." + $("#selectLetter").val();
    var selectedNumber = "." + $("#selectNumber").val();
    filterLetterNumber(selectedLetter, selectedNumber);
    hideLetterDivIfAllNumberDivHidden(selectedLetter);
}

函数filterLetterNumber

function filterLetterNumber(letter, number) {
    // console.log("filterLetterNumber", letter, number);
    $(".letter").hide();
    $(".number").hide();
    $(letter).show();
    $(number).show();
}

函数hideLetterDivIfAllNumberDivHidden

would hide the parent div class="letter" if its child div class="number" has been hidden after touching a select option

function hideLetterDivIfAllNumberDivHidden(selectedLetter) {

    // console.log("hideLetterDivIfAllNumberDivHidden", selectedLetter);

    if (!selectedLetter || selectedLetter === "") {
    console.log("", selectedLetter);
    selectedLetter = ".letter";
  }

    $(selectedLetter).each(function (index, el) {
    console.log("hideLetterDivIfAllNumberDivHidden", index, el);
    $(this).show();

    //var countHidden = $(el).children(".number:hidden").length;
    var countVisible = $(el).children(".number:visible").length;
    //console.log("countVisible", countVisible, "countHidden", countHidden);

    if (countVisible == 0) {
        $(this).hide();
    }

  });

}

关于javascript - 如果选择选项后隐藏子级,如何隐藏父级 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47557104/

相关文章:

javascript - 在 asp.net mvc3 中,如果大小超过 4mb,则无法上传文件

javascript - 将脚本添加到 DOM 后,JQuery 无法在带有 PhantomJS 的 Watir 中使用

html - 加载并执行传统(同步)Google Analytics 跟踪代码片段作为第一个 DOM 元素

javascript - 无法在 iOS 中使用 getComputedStyle 访问样式

javascript - 有什么方法可以在不公开文档的情况下使用 jquery 获取 Google Doc SpreadSheet 的 JSON 数据?

javascript - G+登录按钮回调绑定(bind)两次

javascript - 如何使用 javascript 在网络上显示原始图像数据?

javascript - 有没有办法根据 json 对象中的特定项目查询数据?

php - 如何在通过 Ajax 提交的表单上重新加载验证码?

html - 如何在不移动的情况下一个接一个地显示文本框?