【发布时间】:2017-11-30 13:34:54
【问题描述】:
如果在触摸选择选项后其子 div class="number" 已隐藏,我将隐藏父 div class="letter"。 我尝试使用此处显示的最后几行脚本来执行此操作。 为了更好地了解我需要什么,打开 sn-pp 预览 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>
【问题讨论】:
-
var children = $(".letter").children($('.number'));应该是 var children = $(".letter").children('.number');
-
如果子 div 编号为 diplay="none"**** 注释的 **** 函数之后隐藏 parentdiv 字母的整个代码块将仅在页面加载后执行一次。更改代码的逻辑并稍微清理一下。
-
@hgeorge 你的 div 字母 D 故意为空?预期的行为是什么?如果用户选择
number 1,div D 会发生什么? -
@Sudarpo Chong Yes Div D 是故意为空的,由于我需要的逻辑,根本不应该显示它
-
@hgeorge,在这种情况下,我的小提琴符合你的要求:)
标签: javascript jquery html