查找溢出内的最后一个可见li元素:隐藏元素(jquery)

Ral*_*onz 4 css jquery overflow horizontallist

我有一个水平菜单溢出:隐藏应用于它.

菜单是CMS管理的,所以有时它不会溢出,但是当它溢出时我想找到最后一个可见的li元素并插入一个下拉ul,其中包含溢出的菜单项.我遇到的问题是选择最后一个可见的li(为了在它之前插入HTML)作为溢出隐藏的元素:隐藏似乎仍被视为可见.

到目前为止我的代码是:

$(window).load( function () {

    var totalWidth = 0;
    var menu = $('.nav .menu ul');
    var menuWidth = menu.innerWidth();

    menu.find('li').each(function() {
       totalWidth += $(this).innerWidth() + 30; // add margin
    });

    if (totalWidth > menuWidth) {

        var num_li = $('.nav .menu ul > li:visible').length;

        $('.nav .menu ul li:nth-child('+num_li+')').append("<li><a>More</a></li>");
    }

});
Run Code Online (Sandbox Code Playgroud)

变量num_li返回完整数量的li元素,而不仅仅是查看页面的人可见的元素!

Gon*_*ing 6

您无法直接查询溢出的元素,因为就DOM而言它们并未隐藏(并且没有要使用JQuery检查的属性更改).

您需要根据菜单的宽度/高度检查位置.

JSFiddle:http://jsfiddle.net/TrueBlueAussie/WFGJ4/

menu.find('li').each(function () {
    totalWidth += $(this).outerWidth();
    if (totalWidth > menuWidth) {
        $(this).before("<li><a>More</a></li>");
        return false; // Abort loop
    }
});
Run Code Online (Sandbox Code Playgroud)

我在菜单上放置了自动滚动,这样你就可以看到溢出的内容.