Javascript 如何选择具有特定数组长度的元素

Javascript 如何选择具有特定数组长度的元素,javascript,jquery,arrays,Javascript,Jquery,Arrays,在each函数中,我在DOM中搜索具有特定类名的许多元素。这个类名,根据其长度,将创建一个长为2或4的数组。 我需要分别选择这两种类型的元素,以便采取不同的行动。 我该怎么做 <div class="foo-1"></div> <div class="foo-1"></div> <div class="foo-1-boo-2"></div> 控制台将返回3个元素,其中两个元素的长度为2,一个元素的长度为4。 我需要将这两个

在each函数中,我在DOM中搜索具有特定类名的许多元素。这个类名,根据其长度,将创建一个长为2或4的数组。 我需要分别选择这两种类型的元素,以便采取不同的行动。 我该怎么做

<div class="foo-1"></div>
<div class="foo-1"></div>
<div class="foo-1-boo-2"></div>
控制台将返回3个元素,其中两个元素的长度为2,一个元素的长度为4。 我需要将这两个结果分开,以便采取不同的行动,因为它们是变量。 我需要像这样的东西:


一种可能的方法是使用带有函数的方法作为参数:

var elements = $('[class*=foo-]'),
    caseA = elements.filter(function() {
        return this.className.split('-').length === 2;
    }),
    caseB = elements.filter(function() {
        return this.className.split('-').length === 4;
    });

console.log(caseA.length, caseB.length);

另一种可能的方法是只使用条件语句-

$('[class*=foo-]').each(function () {
    var foo = $(this);
    var fooArray = foo.attr('class').split('-');
    var arrayLength = fooArray.length;
    (2 == arrayLength ? console.log('to do something') : '');
    (4 == arrayLength ? console.log('do something for') : '');
});

我猜您希望将它们作为jQuery集而不是数组,这样就可以轻松地使用jQuery对它们进行整体操作。这样就可以了:

var caseA = $('[class*=foo-]').filter(function() {
   return $(this).attr("class").split("-").length === 2;
});

var caseB = $('[class*=foo-]').filter(function() {
   return $(this).attr("class").split("-").length === 4;
});

如果你有大量的元素,而且速度很慢,你可以稍微优化一下,让它更复杂,用一个元素代替一个过滤器。但在证明有必要之前,我不会费心。我在这篇文章的评论中混合了两种解决方案:

var caseA = col.filter(function() {
  return this.className.split( '-' ).length === 2;
});
var caseB = col.filter(function() {
  return this.className.split( '-' ).length === 4;
});

如果您愿意使用下划线,那么您可以执行u.wherecollection,{length:n},并且不能通过实际的类值作为目标?看起来那样就不那么脆弱了。如果某个插件/库/widgety东西/开发人员添加了类怎么办?你的应用程序中断。过滤器和映射之间有什么区别??。映射创建一个新数组。过滤器减少匹配元素集@EhsanSajjad
var caseA = $('[class*=foo-]').filter(function() {
   return $(this).attr("class").split("-").length === 2;
});

var caseB = $('[class*=foo-]').filter(function() {
   return $(this).attr("class").split("-").length === 4;
});
var caseA = col.filter(function() {
  return this.className.split( '-' ).length === 2;
});
var caseB = col.filter(function() {
  return this.className.split( '-' ).length === 4;
});