如何在forloop中添加jQuery show / hide功能?

时间:2016-10-29 13:04:42

标签: javascript jquery html for-loop

我想在我的网站上添加一个jQuery show / hide 功能。 usual显示/隐藏功能可以正常工作,但我的功能比通常的要复杂一些。

"隐藏div"我想隐藏/显示点击的div在for循环中,并且有大量具有此名称的div。我可以为每个div添加特定的ID(以编程方式)但我无法以编程方式在JavaScript中添加此名称:我必须手动添加它们。

这是我要添加功能的代码:

{% for facet in facets %}
    <div class="block-title"> {{ facet.name }} <div id="hide">HIDE</div></div>
        <ul class="term-list">
            {% for stat in stats %}
                <li class="term-item>{{ stat.name }}</li>
            {% endfor %}
        </ul>
{% endfor %}


这是显示/隐藏功能:

<script>
$(document).ready(function(){
    $("#hide").click(function(){
        $(".term-list").hide();
    });
    $("#show").click(function(){
        $(".term-list").show();
    });
});
</script> 


当我点击隐藏按钮时,它会按预期隐藏每个.term-list div。

我尝试了两种方法,但无法取得成功:

  1. 我在#hide.term-list div(包含forloop)中添加了一个数字,它变为:#hide1.term-list1#hide2和{{1} },但是我无法为JavaScript代码添加一个for循环。
  2. 我点击.term-list2时只尝试隐藏以下(下一个).term-list div,但#hidenext() functions无法正常工作

  3. 所以,我应该怎么做才能在这个for循环中添加jQuery show / hide函数?

2 个答案:

答案 0 :(得分:2)

您无法在页面中重复ID,根据定义它们是唯一的。而是使用类

然后使用遍历来查找关联列表

$(".hide").click(function(){
    // "this" is element event occurred on
    $(this).closest('.block-title').next().hide();
});

答案 1 :(得分:1)

只需使用$(this) jQuery对象选择要素隐藏显示(并且您必须将ID属性hide更改为类,因为您应该只有一个元素在网页上有一个id)。

更改后的ID归属于课程:

var elTerms = null;
$('.hide').click(function(){
  elTerms = $(this).closest('div').find('ul.term-list');
  if (elTerms.is(':visible')) {
    elTerms.hide();
  } else {
    elTerms.show();
  };
});