jquery - 查找最长的 li 并将每个 li 设置为该长度

标签 jquery css

我有一个带有按钮的下拉菜单,用于触摸屏应用程序。我的 li 是内联的,因为我把它们变成了按钮。我不能让它们显示 block 或内联 block 。他们必须是内联的。所以它几乎是这样设置的......

<ul>
    <!-- ko foreach: Options -->
        <li role="presentation" class='item'><a class='btn btn-primary dropdownBtn' role="menuitem" tabindex="-1" data-bind="html: Name">&nbsp;</a></li>
    <!-- /ko -->
</ul>

这对于显示的元素来说效果很好,但是每个元素都有自己的宽度,并且在列表中看起来很奇怪且不匹配。所以我一直在尝试做的是找到最长的 li,然后将其余的 li 设置为该长度,这样它们就会均匀。

我不能在这里走简单的路线并设置最小或最大宽度,因为这些是动态列表,我不知道它们会生成什么。

到目前为止,我一直在尝试这样的事情。

//This grabs each li based on the dropdown that is clicked on.
var lis = $(event.currentTarget).next().find('li');

然后我试图遍历该列表中的每一个并找到宽度

var maxWidth = 0;
var elemWidth = 0;
    $(lis).each(function() {
        elemWidth = parseInt($(this).css('width'));
        if (parseInt($(this).css('width')) > maxWidth) {
            maxWidth = elemWidth;
        }
    });

但是宽度一直返回 0,即使它显然附加了一个宽度,否则它不会显示或显示得很奇怪。我能够在控制台中获取值,但无论我在这里尝试什么,它都会一直返回 0。

我已经尝试获取 outerWidth 或仅获取 width(),但它们要么返回 0,要么导致错误,指出那里不能有函数。这是我认为我的主要问题所在。

然后我会将 li 设置为正确的宽度。

$(lis).each(function() {
    $(this).css('width', maxWidth + "px");
});

任何帮助都会很棒!我正式卡住了!

最佳答案

您可以使用 Math.max 获取 li 的最大宽度:

var maxW = Math.max.apply(Math, $('li').map(function(){ return $(this).width(); }).get());

Fiddle

并使用 $("li").width(maxW); 设置所有 li 的宽度;

Fiddle - get and set max width

作为引用:jQuery get max width of child div's

关于jquery - 查找最长的 li 并将每个 li 设置为该长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26411145/

相关文章:

html - 如何解决这种与 div 位置相关的问题

jquery - Rails - 如何实现客户端的唯一性验证?

jquery - 新版本的 jQuery 说我有语法错误,但没有

javascript - 目标下一个 sibling 的 child 获得外部高度

css - 使用媒体查询缩小/固定带有标题图像的导航栏

javascript - Storybook 组件级 css 文件不起作用

javascript - 如何返回javascript文件中javascript变量的结果

jquery - jQuery构造函数有什么用?另外,我对DOM树感到困惑。而且,看起来我不知道jQuery对象是什么

html - CSS 链接覆盖在 IE6 中不起作用

html - 使行中三个元素的中间填充剩余空间