如何在单击另一个 div 时切换 `<div>` 项?
How to toggle `<div>` items upon click of another div?
我有<div>
这样的结构
<!-- Parent -->
<div id="parentCategory" >
<input type="image" src="a.jpg" onClick="showNextCat('nextCategory1', 'block', 'nextCategory2', 'nextCategory3')" />
<input type="image" src="b.jpg" onClick="showNextCat('nextCategory2', 'block', 'nextCategory1', 'nextCategory3')" />
<input type="image" src="c.jpg" onClick="showNextCat('nextCategory3', 'block', 'nextCategory1', 'nextCategory2')" />
...
</div>
<!-- 1st Child -->
<div id="nextCategory1" style="display: none;">
<input type="image" src="1a.jpg" />
<input type="image" src="1b.jpg" />
</div>
<!-- 2nd Child -->
<div id="nextCategory2" style="display: none;">
<input type="image" src="2a.jpg" />
<input type="image" src="2b.jpg" />
</div>
<!-- 3rd Child -->
<div id="nextCategory3" style="display: none;">
<input type="image" src="3a.jpg" />
<input type="image" src="3b.jpg" />
</div>
我的JS
function showNextCat(id, visibility, h1, h2) {
var item = document.getElementById(id);
document.getElementById(h1).style.display = "none";
document.getElementById(h2).style.display = "none";
if (item.style.display !== "none") {
item.style.display = "none";
}
else {
item.style.display = visibility;
}
}
我不想硬编码 showNextCat()
方法来隐藏 non-selected
<div>
请自己改进JS方法
使用 jQuery 可以让这一切变得简单。首先,从按钮中删除所有 onClick
事件。然后,您必须为选定的 div 定义 css class :
.selected {
display : block;
}
然后在按钮上,指定相关类别的id,例如
<input type="image" src="a.jpg" select-category="nextCategory1" />
您现在需要做的就是为所有按钮定义点击事件
$("[select-category]").click(function () {
$("#" + $(this).attr("select-category")).toggleClass("selected");
});
注意:这不是唯一的解决方案。
如果您使用 jquery,则有 2 个可能的选项
这样就容易多了。
先看看jQuery的解法
将class="category"
应用于您要动态操作的所有元素。
在html中输入值想要显示data-show="nextCategory1"
申请css
.category{
display:none;
}
放这个JS函数
$('#parentCategory input').on('click',function(e){
$('.category').hide();
$('#'+$(this).data('show')).show();
});
现在让我们看看Javascript解决方案,也有点类似
function showNextCat(id) {
var item = document.getElementById(id);
var elem = document.querySelectorAll(".category")
var i;
for (i = 0; i < elem.length; i++) {
elem[i].style.display='none';
}
item.style.display='block';
}
我有<div>
这样的结构
<!-- Parent -->
<div id="parentCategory" >
<input type="image" src="a.jpg" onClick="showNextCat('nextCategory1', 'block', 'nextCategory2', 'nextCategory3')" />
<input type="image" src="b.jpg" onClick="showNextCat('nextCategory2', 'block', 'nextCategory1', 'nextCategory3')" />
<input type="image" src="c.jpg" onClick="showNextCat('nextCategory3', 'block', 'nextCategory1', 'nextCategory2')" />
...
</div>
<!-- 1st Child -->
<div id="nextCategory1" style="display: none;">
<input type="image" src="1a.jpg" />
<input type="image" src="1b.jpg" />
</div>
<!-- 2nd Child -->
<div id="nextCategory2" style="display: none;">
<input type="image" src="2a.jpg" />
<input type="image" src="2b.jpg" />
</div>
<!-- 3rd Child -->
<div id="nextCategory3" style="display: none;">
<input type="image" src="3a.jpg" />
<input type="image" src="3b.jpg" />
</div>
我的JS
function showNextCat(id, visibility, h1, h2) {
var item = document.getElementById(id);
document.getElementById(h1).style.display = "none";
document.getElementById(h2).style.display = "none";
if (item.style.display !== "none") {
item.style.display = "none";
}
else {
item.style.display = visibility;
}
}
我不想硬编码 showNextCat()
方法来隐藏 non-selected
<div>
请自己改进JS方法
使用 jQuery 可以让这一切变得简单。首先,从按钮中删除所有 onClick
事件。然后,您必须为选定的 div 定义 css class :
.selected {
display : block;
}
然后在按钮上,指定相关类别的id,例如
<input type="image" src="a.jpg" select-category="nextCategory1" />
您现在需要做的就是为所有按钮定义点击事件
$("[select-category]").click(function () {
$("#" + $(this).attr("select-category")).toggleClass("selected");
});
注意:这不是唯一的解决方案。
如果您使用 jquery,则有 2 个可能的选项 这样就容易多了。
先看看jQuery的解法
将
class="category"
应用于您要动态操作的所有元素。在html中输入值想要显示
data-show="nextCategory1"
申请css
.category{ display:none; }
放这个JS函数
$('#parentCategory input').on('click',function(e){ $('.category').hide(); $('#'+$(this).data('show')).show(); });
现在让我们看看Javascript解决方案,也有点类似
function showNextCat(id) {
var item = document.getElementById(id);
var elem = document.querySelectorAll(".category")
var i;
for (i = 0; i < elem.length; i++) {
elem[i].style.display='none';
}
item.style.display='block';
}