1

配列の配列を作成する必要があります。私は非常に広範な 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] ]
]
4

2 に答える 2

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();
于 2014-10-15T14:45:37.573 に答える