我需要创建一个数组数组。我有一个相当广泛的if / else循环工作,但我想我可以使用jQueries nextUntil函数重构它。根据我所看到的情况,我走在正确的轨道上,但我的结果只是在两个方向上都需要的。
这是HTML
var array = [[]];
<ul id="list">
<li class="get-it">1</li>
<li class="get-it">2</li>
<li class="ignore-it">3</li>
<li class="get-it">4</li>
<li class="get-it">5</li>
<li class="ignore-it">6</li>
<li class="get-it">7</li>
<li class="get-it">8</li>
<li class="ignore-it">9</li>
<li class="get-it">10</li>
<li class="get-it">11</li>
</ul>
这里有几种方法我试图抓住.get-it列表项
// returns single-item array of all .get-it items
array.push( $( '#list' ).children().nextUntil( '.ignore-it' );
// returns 8 single-item array of .get-it items
$row.children().nextUntil( '.ignore-it' ).each(function(){
array.push( $(this) );
});
这是我实际需要返回的内容
// what I need returned
array = [
[ li[0], li[1] ],
[ li[3], li[4] ],
[ li[6], li[7] ],
[ li[9], li[10] ]
]
答案 0 :(得分:3)
这将有效:
var array = $('.get-it:first, .ignore-it + .get-it').map(function() {
return $(this).add($(this).nextUntil('.ignore-it'));
}).get();
<强> JSFiddle 强>
基本上它的工作原理如下:
// grab the first .get-it, as well as all .get-it
// elements that follow an .ignore-it element
$('.get-it:first, .ignore-it + .get-it')
// map each of those items into an array that contains
// itself, plus all .get-it elements up until the next
// .ignore-it element
.map(function() {
return $(this).add($(this).nextUntil('.ignore-it'));
})
// convert our jQuery collection into a regular array
.get();
答案 1 :(得分:1)
你可以这样做
var array = [], tempArr = $('#list > li.get-it').map(function(){ return $(this); });
while(tempArr.length > 0)
array.push(tempArr.splice(0, 2)); // splice it into two
上面做的是获取元素并将它们分成两部分。