如何在单击另一个 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的解法

  1. class="category"应用于您要动态操作的所有元素。

  2. 在html中输入值想要显示data-show="nextCategory1"

  3. 申请css

    .category{
        display:none;
    }
    
  4. 放这个JS函数

    $('#parentCategory input').on('click',function(e){
        $('.category').hide();
        $('#'+$(this).data('show')).show();
    });
    

View Fiddle

现在让我们看看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';
}  

View Fiddle2