切换多个元素(li),除了被单击的元素

toggle the multiple element(li) except the element clicked on

本文关键字:元素 单击 li      更新时间:2023-09-26

在我的html代码中有多个可折叠列表的li元素。我想切换所有其他的li元素,除了元素点击使用jQuery。

我的代码:
$(document).ready(function () {
    $("#boys").on('click', function () {
        $("#hacky").toggle();
        $("#walking1").toggle();
        $("#walking2").toggle();
        $("#walking3").toggle();
    });
    $("#hacky").on('click', function () {
        $("#boys").toggle();
        $("#walking1").toggle();
        $("#walking2").toggle();
        $("#walking3").toggle();
    });
    $("#walking1").on('click', function () {
        $("#boys").toggle();
        $("#hacky").toggle();
        $("#walking2").toggle();
        $("#walking3").toggle();
    });
    $("#walking2").on('click', function () {
        $("#boys").toggle();
        $("#hacky").toggle();
        $("#walking1").toggle();
        $("#walking3").toggle();
    });
    $("#walking3").on('click', function () {
        $("#boys").toggle();
        $("#hacky").toggle();
        $("#walking1").toggle();
        $("#walking2").toggle();
    });
});

我给每个li元素一个id,然后我切换它们。这不是最有效的方法,代码只能处理静态文本。li元素可以增加或减少,我想以一种有效的方式做到这一点,这样即使将来添加元素,我也不必每次都添加id并编写代码。我不知道如何有效地使用find()this标签,我是jQuery的新手。

编辑:

HTML代码:

<div class="weekday-block">
  <ul class="collapsible roster-collapsible" data-collapsible="accordion">
    <li>
      <div class="collapsible-header active roster-header">
        <h2>Tue 30 June,2015</h2>
      </div>
      <!-- /.collapsible-header -->
      <div class="collapsible-body main-collapsible">
        <ul class="multi-activity-wrapper collapsible-container">
          <li class="collapsible-wrapper" id="boys">
            <ul class="collapsible activity-collapsible" data-collapsible="accordion">
              <li class="activity-head">
                <div class="collapsible-header roster-header">
                  <h3>Boys's Basketball Meeting</h3>
                </div>
                <!-- /.collapsible-header -->
                <div class="collapsible-body">
                  <ul class="roster-activity">
                    <li>
                      <h4>Activity</h4>
                      <h3>CLUBS -> Athletic</h3>
                    </li>
                    <li>
                      <h4>Room</h4>
                      <h3>425</h3>
                    </li>
                    <li>
                      <h4>Capacity</h4>
                      <h3>5/25</h3>
                    </li>
                    <li>
                      <h3>Kevin Schieler</h3>
                    </li>
                  </ul>
                </div>
                <!-- /.collapsible-body -->
                <div class="activity-button-block roster-activity-button-block">
                  <input type="button" onclick="window.location.href='javascript:void(0)'" id="button" class="waves-effect waves-light btn" value="Active">
                </div>
                <!-- /.activity-button-block -->
              </li>
            </ul>
          </li>
          <!-- /.collapsible-wrapper -->
          <li class="collapsible-wrapper" id="hacky">
            <ul class="collapsible activity-collapsible" data-collapsible="accordion">
              <li class="activity-head">
                <div class="collapsible-header roster-header">
                  <h3>Hacky Sack Club</h3>
                </div>
                <!-- /.collapsible-header -->
                <div class="collapsible-body">
                  <ul class="roster-activity">
                    <li>
                      <h4>Activity</h4>
                      <h3>CLUBS -> Athletic</h3>
                    </li>
                    <li>
                      <h4>Room</h4>
                      <h3>425</h3>
                    </li>
                    <li>
                      <h4>Capacity</h4>
                      <h3>5/25</h3>
                    </li>
                    <li>
                      <h3>Kevin Schieler</h3>
                    </li>
                  </ul>
                </div>
                <!-- /.collapsible-body -->
                <div class="activity-button-block roster-activity-button-block">
                  <input type="button" onclick="window.location.href='javascript:void(0)'" id="button" class="waves-effect waves-light btn" value="Set as Active">
                </div>
                <!-- /.activity-button-block -->
              </li>
            </ul>
          </li>
          <!-- /.collapsible-wrapper -->
          <li class="collapsible-wrapper" id="walking1">
            <ul class="collapsible activity-collapsible" data-collapsible="accordion">
              <li class="activity-head">
                <div class="collapsible-header roster-header">
                  <h3>Walking Club</h3>
                </div>
                <!-- /.collapsible-header -->
                <div class="collapsible-body">
                  <ul class="roster-activity">
                    <li>
                      <h4>Activity</h4>
                      <h3>CLUBS -> Athletic</h3>
                    </li>
                    <li>
                      <h4>Room</h4>
                      <h3>425</h3>
                    </li>
                    <li>
                      <h4>Capacity</h4>
                      <h3>5/25</h3>
                    </li>
                    <li>
                      <h3>Kevin Schieler</h3>
                    </li>
                  </ul>
                </div>
                <!-- /.collapsible-body -->
                <div class="activity-button-block roster-activity-button-block">
                  <input type="button" onclick="window.location.href='javascript:void(0)'" id="button" class="waves-effect waves-light btn" value="Set as Active">
                </div>
                <!-- /.activity-button-block -->
              </li>
            </ul>
          </li>
          <!-- /.collapsible-wrapper -->
          <li class="collapsible-wrapper" id="walking2">
            <ul class="collapsible activity-collapsible" data-collapsible="accordion">
              <li class="activity-head">
                <div class="collapsible-header roster-header">
                  <h3>Walking Club</h3>
                </div>
                <!-- /.collapsible-header -->
                <div class="collapsible-body">
                  <ul class="roster-activity">
                    <li>
                      <h4>Activity</h4>
                      <h3>CLUBS -> Athletic</h3>
                    </li>
                    <li>
                      <h4>Room</h4>
                      <h3>425</h3>
                    </li>
                    <li>
                      <h4>Capacity</h4>
                      <h3>5/25</h3>
                    </li>
                    <li>
                      <h3>Kevin Schieler</h3>
                    </li>
                  </ul>
                </div>
                <!-- /.collapsible-body -->
                <div class="activity-button-block roster-activity-button-block">
                  <input type="button" onclick="window.location.href='javascript:void(0)'" id="button" class="waves-effect waves-light btn" value="Set as Active">
                </div>
                <!-- /.activity-button-block -->
              </li>
            </ul>
          </li>
          <!-- /.collapsible-wrapper -->
          <li class="collapsible-wrapper" id="walking3">
            <ul class="collapsible activity-collapsible" data-collapsible="accordion">
              <li class="activity-head">
                <div class="collapsible-header roster-header">
                  <h3>Walking Club</h3>
                </div>
                <!-- /.collapsible-header -->
                <div class="collapsible-body">
                  <ul class="roster-activity">
                    <li>
                      <h4>Activity</h4>
                      <h3>CLUBS -> Athletic</h3>
                    </li>
                    <li>
                      <h4>Room</h4>
                      <h3>425</h3>
                    </li>
                    <li>
                      <h4>Capacity</h4>
                      <h3>5/25</h3>
                    </li>
                    <li>
                      <h3>Kevin Schieler</h3>
                    </li>
                  </ul>
                </div>
                <!-- /.collapsible-body -->
                <div class="activity-button-block roster-activity-button-block">
                  <input type="button" onclick="window.location.href='javascript:void(0)'" id="button" class="waves-effect waves-light btn" value="Set as Active">
                </div>
                <!-- /.activity-button-block -->
              </li>
            </ul>
          </li>
          <!-- /.collapsible-wrapper -->
        </ul>
      </div>
      <!-- /.collapsible-body -->
    </li>
  </ul>
</div>
<!-- /.weekday-block -->

您可以通过使用jquery ' this

来极大地简化这个过程
$(".collapsible-wrapper").click(function(){
    $(".collapsible-wrapper").not(this).toggle();
});

你可以这样做:

$("li").click(function () {
  $("li").not(this).toggle();
});

或者,您可以这样做:

$("li").click(function () {
  $("li").toggle();
  $(this).toggle(); // Retoggle
});

我刚刚添加了li目标作为此概念的示例。实际上,您需要添加一个类来作为您想要切换的特定<ul>元素的选择器,否则它将切换页面上的所有<li>元素。

下面是一个例子:

$(".myList li").click(function () {
  $(".myList li").not(this).toggle();
});
  1. 为所有<li>元素添加一个通用类
  2. 使用公共类
  3. 在元素上绑定事件
  4. 使用this上下文和siblings()来获取点击的
  5. 之外的其他元素
  6. toggle兄弟元素
  7. 我也会建议你使用fadeToggle()slideToggle()平滑动画

$(document).ready(function() {
  $('.myLis').on('click', function() {
    $(this).siblings('.myLis').slideToggle();
  });
});
ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
}
ul li {
  color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<ul>
  <li id="walking2" class="myLis">1</li>
  <li id="boys" class="myLis">2</li>
  <li id="hacky" class="myLis">3</li>
  <li id="walking1" class="myLis">4</li>
  <li id="walking3" class="myLis">5</li>
</ul>

在问题中添加HTML后

您可以使用以下命令来切换其他li . s。

// On click of the li
$('.collapsible-wrapper').on('click', function () {
    $('.collapsible-wrapper').not(this).slideToggle();
    // toggle li elements other than the clicked
});

可以这样写:

HTML:

<li onclick="javascript:collapse(this)">test1</li>

脚本:

function collapse(e) {
    var elem = document.getElementsByTagName("li");
    for(var i=0;i<elem.length;i++) 
        if(elem[i]!=e) elem[i].toggle();
}

我的例子是原生JS,所以。toggle()不起作用