3

私は一見非常に単純な問題を抱えていますが、私の帯域幅は今では非常に制限されており、SO を検索しましたが、C# にのみ適用される関連する質問が見つかりました。まだ運がないことを意味します。

HTML:

<ul class="first">
  <li data-id="1">One</li>
  <li data-id="2">Two</li>
  <li data-id="3">Thre</li>
  <li data-id="4">Four</li>
  <li data-id="5">Five</li>
  <li data-id="6">Six</li>
</ul>
<ul class="second">
  <li data-id="1">One</li>
  <li data-id="2">Two</li>
  <li data-id="3">Thre</li>
  <li data-id="4">Four</li>
</ul>

最初のアイテムから最後の 2 つのアイテム (したがって、5 と 6) を削除したいのは、2 番目のアイテムに存在しないためです。順序は実際には重要ではありません。私の問題を単純化するためのサンプル。基本的にこれを達成するための明確なアイデアはありません。申し訳ありませんが、.length チェックを試みるたびに、最初の項目をすべて削除します。

どんなヒントでも大歓迎です。ありがとう

更新: 申し訳ありません。「実際には順序は重要ではありません」: リストが次のように順序付けられていない可能性があることを意味しました。

<ul class="second">
  <li data-id="3">Thre</li>
  <li data-id="1">One</li>      
  <li data-id="4">Four</li>
  <li data-id="2">Two</li>
</ul>

また、最初に適用されます。

4

4 に答える 4

9

属性によって同等性を評価している場合data-id:

$('.first li').filter(
    function(){
        return !$('.second li[data-id="' + $(this).data('id') + '"]').length;
    }).remove();​

JS フィドルのデモ

参考文献:

于 2012-12-28T16:28:42.023 に答える
2
$('ul.first li:gt(3)').remove();

または:

var $first = $('.first li'), $second = $('.second li');

$first.filter(function(){
    return !$second.filter('[data-id='+ this.dataset.id +']').length
}).remove();  
于 2012-12-28T16:26:05.977 に答える
1

これを試して

var set1 = $('.first').children(),
    set2 = $('.second').children();

set1.filter(function() {
    var testingId = $(this).data('id'),
        found = set2.filter(function() {
            return $(this).data('id') === testingId;
        });

    return found.length === 0;
}).remove();

http://jsfiddle.net/gaby/Ehewz/のデモ

于 2012-12-28T16:32:46.603 に答える
1
// start by building a list of elements in list two.
var list2 = {};
$('.second li').each(function(){
    // by data id.
    list2[$(this).attr('data-id')] = true;
    // by text
    // list2[$(this).text()] = true;
});
// Then remove any values from the first list where it's data-id isn't in our list.
$('.first li').each(function(){
    // Make replacement here to match text.
    if( ! list2[ $(this).attr('data-id') ] ){
    // if( ! list2[ $(this).text() ] ){
        $(this).remove();
    }
});
于 2012-12-28T16:36:44.867 に答える