【问题标题】:Having Trouble with jQuery Function using .each()使用 .each() 使用 jQuery 函数时遇到问题
【发布时间】:2015-07-17 03:07:32
【问题描述】:

我有一个由 Bootstrap 下拉菜单组成的导航。在每个下拉列表中会生成 15-20 个列表项。我无法访问 HTML,因为它是在我无法触摸的地方动态生成的。由于列表项的数量,我要求将它们分成三列。

我创建了一个 jQuery 函数来计算 li 的数量,将它们除以 3,然后将它们包装在 Bootstrap 列中。一切都运行良好,但我需要在每个下拉菜单上触发相同的功能,并且只计算其各自下拉菜单中的 li。同样,我无法访问 HTML 来为每个下拉菜单指定一个 ID,但它们都有“下拉菜单”类。

HTML:

<!-- begin nav -->
<div class="navbar navbar-inverse yamm">
    <div class="navbar-header">
        <a href="#" class="navbar-brand">IPOG</a>
    </div>
    <div class="navbar-nocollapse">
        <ul class="nav navbar-nav navbar-right">
            <!-- Forms -->
            <li><a href="#">Home</a></li>
            <li class="dropdown"><a href="#" class="dropdown-toggle">Page Link</a>
                <ul class="dropdown-menu" id="test">
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                </ul>
            </li>
            <li class="dropdown"><a href="#" class="dropdown-toggle">Page Link</a>
                <ul class="dropdown-menu">
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                </ul>
            </li>
            <li class="dropdown"><a href="#" class="dropdown-toggle">Page Link</a>
                <ul class="dropdown-menu">
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                    <li><a href="#">Link Here</a></li>
                </ul>
            </li>
        </ul>
    </div>
</div>
<!-- end navbar -->

使用 ID 处理 jQuery:

$(function() {

    //Variables
    var n = $("#test li").length,
    x = n / 3,
    lis = $("#test li");

    for(var i = 0; i < lis.length; i+=x) {
        lis.slice(i, i+x).wrapAll("<div class='col-xs-4'></div>");
    }

});

尝试使用 each():

$(function() {
    $(".dropdown").each(function() {
        //Variables
        var n = $(".dropdown-menu li").length,
        x = n / 3,
        lis = $(".dropdown-menu li");

        for(var i = 0; i < lis.length; i+=x) {
            lis.slice(i, i+x).wrapAll("<div class='col-xs-4'></div>");
        }
    });
});

我认为问题在于我的函数是计算每个 .dropdown-menu 下的每个 li,而不是计算当前 .dropdown-menu 中的 li 并为每个 li 执行。

编辑: 正确处理余数的工作小提琴:http://jsfiddle.net/743qLqma/5/

【问题讨论】:

  • 一个额外的问题是:这个解决方案,一个不能被 3 整除的数字我显然留下了一个小数。多余的 li 被放入最后一列。我怎样才能把它们放在第一列?如果您查看小提琴,您将看到最终列表项被放入下拉列表的最后一列。我需要它出现在第一列。小提琴:http://jsfiddle.net/743qLqma/3/
  • 我发现了剩下的问题。将小提琴更新到最新。

标签: javascript jquery twitter-bootstrap for-loop each


【解决方案1】:

each() 方法中你应该选择这样的内部元素

$(this).find(".dropdown-menu li")

而不是

$(".dropdown-menu li")

这个工作jsfiddle

【讨论】:

  • 考虑将您的小提琴链接更改为这个:jsfiddle.net/bm3wdagy/1(包括引导程序)
  • 是的,我所做的更改就像在 Working jQuery with ID 中一样
  • 不,我的意思是更新您的答案并将您的链接更改为我发布的链接...我没有更改任何内容,仅包括您没有的 Bootstrap.css。跨度>
  • 非常感谢!完美运行!
  • 一个额外的问题是:这个解决方案,一个不能被 3 整除的数字我显然留下了一个小数。多余的 li 被放入最后一列。我怎样才能把它放在第一列?
【解决方案2】:

您可以在 each 中使用 $(this) 来访问当前下拉列表,例如使用 $(this).find(....) 查找其子项

【讨论】:

  • 你能举个例子吗?我不确定如何在函数中实现 $(this)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
相关资源
最近更新 更多