Javascript 对于每个列表,计算具有匹配类的元素总数

Javascript 对于每个列表,计算具有匹配类的元素总数,javascript,jquery,Javascript,Jquery,我花了很多时间试图找出这个答案,并寻找答案,但我找到的答案中没有一个考虑到计算每个列表。我需要一些东西,可以计算每个元素中类为“link”的元素总数,类为“nav”。我需要将该数字存储为变量,以便根据范围限定符向“nav”元素添加新类 <ul class="nav"> <li class="link"></li> <li class="link"></li> <li class="link"><

我花了很多时间试图找出这个答案,并寻找答案,但我找到的答案中没有一个考虑到计算每个列表。我需要一些东西,可以计算每个元素中类为“link”的元素总数,类为“nav”。我需要将该数字存储为变量,以便根据范围限定符向“nav”元素添加新类

<ul class="nav">
    <li class="link"></li>
    <li class="link"></li>
    <li class="link"></li>
    <li class="link">
        <ul class="subnav">
            <li class="link"></li>
            <li class="link"></li>
            <li class="link"></li>
            <li class="link"></li>
            <li class="link"></li>
        </ul>
    </li>
</ul>
<ul class="nav">
    <li class="link"></li>
    <li class="link"></li>
    <li class="link">
        <ul class="subnav">
            <li class="link"></li>
            <li class="link"></li>
            <li class="link"></li>
        </ul>
    </li>
    <li class="link">
        <ul class="subnav">
            <li class="link"></li>
            <li class="link"></li>
        </ul>
    </li>
</ul>

非常感谢您的帮助

您可以这样做:

var items = $.map( $(".nav"), function(navEl) {
    return [navEl, navEl.find(".link").length];
});

console.log( items );

我正在使用
jQuery.map()
基于
.nav
元素构造一个新数组-构造的数组中的每个元素都是自己的数组:第一个索引是jQuery对象,第二个是其子元素
.link
的计数。

您可以使用此代码来计算class
link
在class
nav
的每个元素中的元素数:

$(document).ready(function(){
    $('body').find('.nav').each(function(){
        sum = 0;
        $(this).find('.link').each(function(){
        sum=sum+1;
        });
        console.log(sum);
    });
});

在今早(装载StackOverflow之前)进行了更多的挖掘之后,我终于找到了这个答案:

$('.nav').each(function(){
    var numLinks = $(this).find('.link').length;
    if (numLinks > 40) {
        $(this).addClass('mm-5-cols');
    } else if (numLinks > 30 && numLinks <= 40) {
        $(this).addClass('mm-4-cols');
    } else if (numLinks > 20 && numLinks <= 30) {
        $(this).addClass('mm-3-cols');
    } else if (numLinks > 10 && numLinks <= 20) {
        $(this).addClass('mm-2-cols');
    } else if (numLinks <= 10) {
        $(this).addClass('mm-1-col');
    }
});
$('.nav')。每个(函数(){
var numLinks=$(this).find('.link').length;
如果(numLinks>40){
$(this.addClass('mm-5-cols');

}否则,如果(numLinks>30&&numLinks 20&&numLinks 10&&numLinks)对它们进行计数,然后对计数做些什么?因为计数部分很容易(尽管有困难)(如果你知道怎么做的话);然后您需要做的事情决定了我们需要向您展示如何完成和演示的内容。此外,作为附录,您没有展示您尝试过的任何代码,也没有解释代码是如何失败的(请参阅“,”和“,”指南以获取具体建议)。因此,目前,很难以任何有意义的方式回答您的问题(因为很难看出你真正在问什么)。你也需要嵌套的
链接吗?