jquery - 如何使用 jquery 将两个类更改为另一个类?

标签 jquery html css

<分区>

我有一个包含此代码片段的 TreeView 。 我有 CollOpenCollClosed 类。 我如何更改 CollOpenCollClosed 或反之亦然单击具有这两个类中的每一个的 span?

     .treeView{
        -moz-user-select:none;
        position:relative;
      }

      .treeView ul{
        margin:0 0 0 -1.5em;
        padding:0 0 0 1.5em;
      }

      .treeView ul ul{
        background:url('http://kaminet.ir/img/list-item-contents.png') repeat-y left;
      }

      .treeView li.lastChild > ul{
        background-image:none;
      }

      .treeView li{
        margin:0;
        padding:0;
        background:url('http://kaminet.ir/img/list-item-root.png') no-repeat top left;
        list-style-position:inside;
        list-style-image:url('http://kaminet.ir/img/button.png');
        cursor:auto;
      }

      .treeView li.CollOpen{
        list-style-image:url('http://kaminet.ir/img/button-open.png');
        cursor:pointer;
      }

      .treeView li.CollClosed{
        list-style-image:url('http://kaminet.ir/img/button-closed.png');
        cursor:pointer;
      }

      .treeView li li{
        background-image:url('http://kaminet.ir/img/list-item.png');
        padding-left:1.5em;
      }

      .treeView li.lastChild{
        background-image:url('http://kaminet.ir/img/list-item-last.png');
      }

      .treeView li.CollOpen{
        background-image:url('http://kaminet.ir/img/list-item-open.png');÷
      }

      .treeView li.CollOpen.lastChild{
        background-image:url('http://kaminet.ir/img/list-item-last-open.png');
      }
    <ul class="treeView">
        <li>
            <span class="CollOpen"></span><span>Collapsible lists</span>
            <ul class="CollList">
                <li>
                    <span class="CollClosed"></span><span>Actions</span>
                    <ul class=" CollList" style="display: none;">
                        <li class="lastChild">
                            <span class="CollOpen"></span><span>Actions</span>
                            <ul class="CollList" style="display: none;">
                                <li class="">Expanding/opening</li>
                                <li class="lastChild">Collapsing/closing</li>
                            </ul>
                        </li>
                    </ul>
                </li>
                <li class="lastChild">
                    <span class=" CollOpen"></span><span>Actions</span>
                    <ul class="CollList" style="display: none;">
                        <li class="">Directory listings</li>
                        <li class="">Tree views</li>
                        <li class="lastChild">Outline views</li>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>

最佳答案

I want when user click on span with ColOpen class replace it with ColClosed and hide ul. but i don't know how to know what span the user clicked

您可以通过监视对容器元素(例如, TreeView )的点击并告诉 jQuery 仅在该点击是在 .CollOpen.CollClosed 上通知您来做到这一点 跨度(这称为事件委托(delegate)):

$(".treeView").on("click", ".CollOpen, .CollClosed", function() {
    // ...
});

在事件处理程序中,this 将是被单击的范围,因此我们可以使用它来切换类并隐藏以下 ul:

$(this).toggleClass("CollOpen CollClosed").nextAll('ul').first().toggle();

所以:

$(".treeView").on("click", ".CollOpen, .CollClosed", function() {
    $(this).toggleClass("CollOpen CollClosed").nextAll('ul').first().toggle();
});

例子:

$(".treeView").on("click", ".CollOpen, .CollClosed", function() {
      $(this).toggleClass("CollOpen CollClosed").nextAll('ul').first().toggle();
});
.treeView {
  -moz-user-select: none;
  position: relative;
}
.treeView ul {
  margin: 0 0 0 -1.5em;
  padding: 0 0 0 1.5em;
}
.treeView ul ul {
  background: url('http://kaminet.ir/img/list-item-contents.png') repeat-y left;
}
.treeView li.lastChild > ul {
  background-image: none;
}
.treeView li {
  margin: 0;
  padding: 0;
  background: url('http://kaminet.ir/img/list-item-root.png') no-repeat top left;
  list-style-position: inside;
  list-style-image: url('http://kaminet.ir/img/button.png');
  cursor: auto;
}
.treeView li.CollOpen {
  list-style-image: url('http://kaminet.ir/img/button-open.png');
  cursor: pointer;
}
.treeView li.CollClosed {
  list-style-image: url('http://kaminet.ir/img/button-closed.png');
  cursor: pointer;
}
.treeView li li {
  background-image: url('http://kaminet.ir/img/list-item.png');
  padding-left: 1.5em;
}
.treeView li.lastChild {
  background-image: url('http://kaminet.ir/img/list-item-last.png');
}
.treeView li.CollOpen {
  background-image: url('http://kaminet.ir/img/list-item-open.png');
  ÷
}
.treeView li.CollOpen.lastChild {
  background-image: url('http://kaminet.ir/img/list-item-last-open.png');
}
<ul class="treeView">
  <li>
    <span class="CollOpen">[*]</span><span>Collapsible lists</span>
    <ul class="CollList">
      <li>
        <span class="CollClosed">[*]</span><span>Actions</span>
        <ul class=" CollList" style="display: none;">
          <li class="lastChild">
            <span class="CollOpen">[*]</span><span>Actions</span>
            <ul class="CollList" style="display: none;">
              <li class="">Expanding/opening</li>
              <li class="lastChild">Collapsing/closing</li>
            </ul>
          </li>
        </ul>
      </li>
      <li class="lastChild">
        <span class=" CollOpen">[*]</span><span>Actions</span>
        <ul class="CollList" style="display: none;">
          <li class="">Directory listings</li>
          <li class="">Tree views</li>
          <li class="lastChild">Outline views</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

请注意,尽管如此,我必须将 [*] 添加到 span 中,否则它们将没有宽度并且无法被点击。

我建议与其在 .CollOpen.CollClosed 之间切换,不如让事物以一种方式呈现(打开或关闭)并在 li 将渲染切换为另一种方式。我会让 li 中的跨度保持一致。 (不要认为我会使用实际的元素符号作为扩展/收缩指示器,但这是一种风格。)

关于jquery - 如何使用 jquery 将两个类更改为另一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34072521/

上一篇:html - 控制 HTML 中背景图像的大小调整和重复

下一篇:html - 2列RWD中的重叠列

相关文章:

出现在彼此下方的 jQuery 幻灯片元素(应该并排)

html - CSS3打字效果在最后切掉一些文字

javascript - 100% 背景图 block ,100% 高度 div

javascript - 打开连接到跳转链接 anchor 的 Accordion 面板

javascript - 当下拉值为 0 时隐藏 div

javascript - bootstrap form-inline 无法使用 d3 正确渲染

html - 删除页眉边框

javascript - 隐藏/不加载基于配置文件的 HTML 部件的最佳方法?

jQuery 实时搜索 - 过滤 HTML

css - overflow-y 滚动总是显示,即使它没有溢出