【问题标题】:Drop down list selectors JQUERY下拉列表选择器 JQUERY
【发布时间】:2013-01-12 05:59:38
【问题描述】:

我正在尝试创建一个高效且最小化的 jQuery 下拉脚本。 我需要一种方法将几个 uls 与一个 li 相关联,并在每个循环中引用它。 将每个可点击的 li 标题视为一个集群,它们下面的“子”ul 也是其中的一部分。

我想编写一段高效的代码,使用 each 循环遍历每个可点击的 lis 并展开与其关联的子列表 uls。 问题是我需要知道如何以可以在每个循环中引用的方式将这些子列表 ul 与父 li 关联起来。没有标准的 jquery 选择器可以真正帮助我,因为子列表 uls 并不是 li 的真正孩子。

下面的 HTML 和 Jquery 尝试。请帮忙

<ul>
        <li class='tier1'>This is what I want to click</li>
            <ul (#1)>
                <li>I want this to drop down</li>

            </ul>
                             <ul>
                <li  id="gap">I want these to drop down</li>

            </ul>
       <li class='tier1'>Another clickable title</li>
            <ul>
                <li  id="gap">I dont want this to drop down when I click the li at the top of this markup</li>

            </ul>
</ul>

我的问题是当我单击它上面的 li 时我想要滑动切换的 ul (#1) 不是一个孩子。

于是我做了如下代码:

$(document).ready(function(){
    $('.tier1').each(function(){
        $(this).click(function(){
            $(this).children('ul').slideToggle('slow');
        });
    });
});

【问题讨论】:

  • 由于在 LI 之间嵌套了 UL,您的 HTML 无效。
  • 请创建一个 JSFiddle 并分享链接。我们缺少一些元素(使用 .tier1 类的元素)

标签: jquery list each


【解决方案1】:

您的主要问题可能是在您提供的 HTML 中,“tier1”类没有任何内容。您也不需要.each() 函数,因为您只需将点击函数附加到类:

$('.tier1').click(function(){
    $(this).children('ul').slideToggle('slow');
});

您的 HTML 也是无效的,您不能将 UL 嵌套在 UL 中。固定版本:

<ul>
    <li class="tier1">This is what I want to click
        <ul>
            <li>I want this to drop down</li>
        </ul>
        <ul>
            <li  id="gap">I want these to drop down</li>
        </ul>
    </li>
    <li class="tier1">Another clickable title
        <ul>
            <li id="gap">I dont want this to drop down when I click the li at the top of this markup</li>
        </ul>
    </li>
</ul>

您还需要一些 CSS 在点击之前隐藏子项:

ul li ul{
    display: none;
}

this fiddle 中的工作演示。

【讨论】:

  • 我怎样才能有效地创建一个没有嵌套列表的可折叠列表?此外,您没有可点击的 li 项目的结束标签。这可以吗?编辑。我还编辑了上面的代码。试图发布这个项目的实际代码,但它没有在 jsfiddle 中正确呈现。至少,它不会像当前在浏览器中那样呈现。
  • 有一个结束标签。它们的结构是&lt;li&gt;&lt;ul&gt;&lt;li&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;——注意第一个li的ulINSIDE。至于创建没有嵌套的可折叠列表,您必须更具体地说明您想要做什么。
  • 这正是我所需要的。非常感谢!
  • 其实。我有第三层,所以我需要能够点击下拉的内容而不切换回来。
  • 修改了代码以使用更多层:jsfiddle.net/Cj5Pe。 HTML 的结构不同,jQuery 也有所改变。
【解决方案2】:

在此处查看我的示例:http://jsfiddle.net/D29mQ/2/

您的标记中有一些错误。 ul 不能是 ul 的直接后代,但可以是 li 的直接后代。我在 li.drawer 中的ul 上添加了一个hide(),这样如果禁用了 javascript,内容就不会隐藏(我不建议使用 css 隐藏这些内容)。

<ul>
<li>
    <p class='handle'>This is what I want to click</p>
    <ul  class='drawer'>
        <li>
            <p class='handle'>This has a drawer too!</p>
            <ul  class='drawer'>
            <li>I want this to drop down</li>
            </ul>
        </li>
    </ul>
    <ul  class='drawer'>
        <li>I want these to drop down</li>
    </ul>
</li>

<li>
    <p class='handle'>This is what I want to click</p>
    <ul  class='drawer'>
        <li>I want this to drop down</li>
    </ul>
    <ul  class='drawer'>
        <li>I want these to drop down</li>
    </ul>
</li>
</ul>

<div>
    <p class='handle'>Here is an example using a wrapper div and paragraph tags.</p>
    <p  class='drawer'>
        I want this to drop down
    </p>
    <p  class='drawer'>
        I want these to drop down
    </p>
</div>  

和 jquery

$(document).ready(function(){
  $('.drawer').hide();
  $('.handle').click(function(){
        $(this).parent().children().not(this).slideToggle('slow');        
  });
});

【讨论】:

  • 我有类似的东西。我有一个可行的解决方案,但代码相当长。我不想迭代集群名称及其后面的内容,而是想创建简单的代码来循环并为我迭代
  • 另外,请阅读我的回答。当我说您的标记中有错误时,这意味着您编写的 html 代码无效,并且当您尝试使用 jquery 或 javascript 操作它时将无法正常运行
  • 我选择你的作为最佳答案,因为它是做我需要的简单代码并允许多层。你能解释一下最后一行代码吗? $(this).parent().children().not(this).slideToggle(); ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 2022-11-12
  • 1970-01-01
相关资源
最近更新 更多