3

我有一个看似非常简单的问题,但我的带宽现在是如此有限,并且已经搜索过但发现一个仅适用于 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>

我想从第一个(因此是五个和六个)中删除最后两个项目,因为它们在第二个中不存在。顺序实际上并不重要。简化我的问题的示例。基本上没有明确的想法来实现这一点,抱歉,所以每当我尝试使用 .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 回答