Javascript 如何通过起始值查找类名长度?

Javascript 如何通过起始值查找类名长度?,javascript,jquery,arrays,Javascript,Jquery,Arrays,我试图通过它的startname来查找类名,使用该值,我根据名称的长度查找不同的长度 我得到了错误的结果。任何人都可以帮我找到正确的方法。以下是我的作品: html: <div id="first"> <span class="textHighLight userNote2">CO</span> <span class="textHighLight userNote2">N</span>

我试图通过它的start
name
来查找类名,使用该值,我根据名称的长度查找不同的长度

我得到了错误的结果。任何人都可以帮我找到正确的方法。以下是我的作品:

html:

    <div id="first">
        <span class="textHighLight userNote2">CO</span>
        <span class="textHighLight userNote2">N</span>
        <span class="textHighLight userNote2">STR</span>
        <span class="textHighLight userNote2">U</span>
        <span><span class="textHighLight userNote2">CTION</span>,</span>
    </div>

    <div id="second">
        <span class="textHighLight userNote2 userNote3">CO</span>
        <span class="textHighLight userNote2 userNote3">N</span>
        <span class="textHighLight userNote2 userNote3">STR</span>
        <span class="textHighLight userNote2 userNote3">U</span>
        <span><span class="textHighLight userNote2 userNote3">CTION</span>,</span>
    </div>
我明白,我没有按应有的方式进行适当的过滤。有人帮我吗

var getLength=函数(元素){
var c=0;
元素.find('.textHighLight')。每个(函数(i,e){
变量elem_classes=$(e).attr('class').split('');
对于(变量i=0;i-1){
C++;
}
}
});
返回c;
};
警报(getLength($('#秒'));
var getLength=函数(元素){
var c=0;
元素.find('.textHighLight')。每个(函数(i,e){
变量elem_classes=$(e).attr('class').split('');
对于(变量i=0;i-1){
C++;
}
}
});
返回c;
};
警报(getLength($('#秒'));

这不是
过滤器的用途
filter
将匹配元素的集合过滤为相等或更小的集合。如果你过滤一组5个元素,你永远不会得到10个

您应该只使用
每个
在集合上循环


这不是
过滤器
的用途
filter
将匹配元素的集合过滤为相等或更小的集合。如果你过滤一组5个元素,你永远不会得到10个

您应该只使用
每个
在集合上循环

此答案用于将元素数组转换为数字数组,表示每个元素上有多少类以
userNote
开头。然后,它简单地将这些数字相加

var getLength=函数(元素){
var classLength=element.find('.textHighLight').map(函数(即,e){
返回此.className.split(“”).reduce(函数(cNum,cName){
返回cName.substring(0,8)==“userNote”?cNum+1:cNum;
}, 0);
}).get().reduce(函数(p,c){
返回p+c;
});
返回类长度;
}
log(getLength($('#first'))
log(getLength($('#秒'))

一氧化碳
N
STR
U
行动,
一氧化碳
N
STR
U
行动,
此答案用于将元素数组转换为数字数组,表示每个元素上有多少类以
userNote
开头。然后,它简单地将这些数字相加

var getLength=函数(元素){
var classLength=element.find('.textHighLight').map(函数(即,e){
返回此.className.split(“”).reduce(函数(cNum,cName){
返回cName.substring(0,8)==“userNote”?cNum+1:cNum;
}, 0);
}).get().reduce(函数(p,c){
返回p+c;
});
返回类长度;
}
log(getLength($('#first'))
log(getLength($('#秒'))

一氧化碳
N
STR
U
行动,
一氧化碳
N
STR
U
行动,
其他解决方案

其他解决方案


我错过了什么?为什么第二个要记录
10
?你的方法想做什么?我需要知道,每个元素的类名长度都取决于它的起始值,这是我在标题中发布的,甚至是我的例子,你难道不能从我的评论中理解这个想法吗?根据我的评论,显然不是。根据它的3次投票,我说我并不孤单!因此,第一个示例有5个元素,以
userNote
开头,而第二个示例有10个元素,这就是您要计算的内容?是的,我可能解释得不太清楚,但很容易理解。只需控制台5所需的第一个函数(因为
userNote
实例是5),下一个函数实例是10(
userNote
在类名中有10个实例),我缺少什么?为什么第二个要记录
10
?你的方法想做什么?我需要知道,每个元素的类名长度都取决于它的起始值,这是我在标题中发布的,甚至是我的例子,你难道不能从我的评论中理解这个想法吗?根据我的评论,显然不是。根据它的3次投票,我说我并不孤单!因此,第一个示例有5个元素,以
userNote
开头,而第二个示例有10个元素,这就是您要计算的内容?是的,我可能解释得不太清楚,但很容易理解。仅仅是控制台5所需的第一个函数(因为
userNote
实例是5),下一个函数实例是10(
userNote
在类名中有10个实例),虽然对答案的一些解释可能会有所帮助,但我不确定为什么这个答案会被否决。我认为这是一个完全有效的实现+1虽然对答案进行一些解释可能会有所帮助,但我不确定为什么这个答案被否决。我认为这是一个完全有效的实现+1在这种情况下,我认为性能并不是一个真正的问题,但我只想指出,基本上是将元素循环两次,一次使用
map
,然后再次使用
reduce
,当它可以是一个单循环来处理计算数字和求和时。在这种情况下,我认为性能并不是一个真正的问题,但我只想指出,基本上是将元素循环两次,一次使用
map
,然后再次使用
reduce
,此时可以使用单个循环来处理计算数字和求和。
var getLength = function (element) {
    var c = 0;
    element.find('.textHighLight').each(function(i, e){
        var elem_classes = $(e).attr('class').split(' ');
        for (var i = 0; i < elem_classes.length; i++) {
            if (elem_classes[i].indexOf('userNote') > -1) {
                c++;
            }
        }
    });
    return c;
};

alert(getLength($('#second')));
var getLength = function (element) {
    var classLength = 0;

    element.find('.textHighLight').each(function(index){
        classLength += this.className.split(' ').reduce(function(cNum, cName){
            return cName.substring(0, 8) === 'userNote' ? cNum + 1 : cNum;
        }, 0);
    });

    return classLength;
}
var getLength = function (element) {
    return element.find("[class]").map(function() {
        return this.className;
    }).get().join().match(/userNote/g).length;
}
var second = getLength($('#second'));
alert(second)