2016-10-31 4 views
0

У меня есть DIV, который содержит некоторые элементы, такие как этотудалить все элементы, кроме одного из каждого класса с JQuery

<code> 
    <pre> 
    <div class="multiSel"> 
     <span class="KNet" title="KNet">KNet</span> 
     <span class="Visa" title="Visa">Visa</span> 
     <span class="KNet" title="KNet">KNet</span> 
     <span class="Visa" title="Visa">Visa</span> 
    </div> 
    </pre> 
</code> 

Я хочу сохранить первый элемент каждого класса и удалить другие

+0

Используйте ['not()'] (http://api.jquery.com/not) или [': not'] (http://api.jquery.com/not-selector/) и ['remove()'] (http://api.jquery.com/remove) –

+0

'$ ('.KNet: gt (0), .Visa: gt (0)'). remove();' – Satpal

ответ

0

цикл по элементам и классов ...

var classes = []; 
 
$(".multiSel").find("span").each(function(i){ 
 
    var curClass= $(this).attr("class"); 
 
    if(jQuery.inArray(curClass, classes)>-1){ 
 
    $(this).remove(); 
 
    } 
 
    classes[i] = curClass; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<code> 
 
    <pre> 
 
    <div class="multiSel"> 
 
     <span class="KNet" title="KNet">KNet</span> 
 
     <span class="Visa" title="Visa">Visa</span> 
 
     <span class="KNet" title="KNet">KNet</span> 
 
     <span class="Visa" title="Visa">Visa</span> 
 
    </div> 
 
    </pre> 
 
</code>

UPDATE жаль не читает точно, что вы хотели. .. теперь он должен так что вы хотите ....

заполните массив со всеми классами ... затем посмотрите с inArray, если он уже существует .. если нет (-1), то удалите его ... так что вы просто сохранить первые позиции

+0

OP хочет удалить все, кроме 1 для класса ea ch – guradio

+0

спасибо, что он очень хорошо работает – user3577990

1

Используйте :not() селектор по с :first селектором.

$('.KNet:not(:first),.Visa:not(:first)').remove()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<code> 
 
    <pre> 
 
    <div class="multiSel"> 
 
     <span class="KNet" title="KNet">KNet</span> 
 
     <span class="Visa" title="Visa">Visa</span> 
 
     <span class="KNet" title="KNet">KNet</span> 
 
     <span class="Visa" title="Visa">Visa</span> 
 
    </div> 
 
    </pre> 
 
</code>

UPDATE 1: Если все элементы span имеет только одно имя класса, то вы можете сделать что-то вроде этого, используя метод filter().

//$('.KNet:not(:first),.Visa:not(:first)').remove(); 
 

 
$('.multiSel span').filter(function() { 
 
    return $(this).is(':not(.' + this.className + ':first)') 
 
}).remove();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<code> 
 
    <pre> 
 
    <div class="multiSel"> 
 
     <span class="KNet" title="KNet">KNet</span> 
 
     <span class="Visa" title="Visa">Visa</span> 
 
     <span class="KNet" title="KNet">KNet</span> 
 
     <span class="Visa" title="Visa">Visa</span> 
 
    </div> 
 
    </pre> 
 
</code>


UPDATE 2: Или гораздо лучший способ использования карты объекта хэш который содержит имя класса в качестве свойства.

var hasRef = {}; 
 

 
$('.multiSel span').each(function() { 
 
    if (hasRef[this.className]) $(this).remove(); 
 
    else hasRef[this.className] = true; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<code> 
 
    <pre> 
 
    <div class="multiSel"> 
 
     <span class="KNet" title="KNet">KNet</span> 
 
     <span class="Visa" title="Visa">Visa</span> 
 
     <span class="KNet" title="KNet">KNet</span> 
 
     <span class="Visa" title="Visa">Visa</span> 
 
    </div> 
 
    </pre> 
 
</code>

+0

спасибо, но проблема в том, что у меня есть много классов не только knet и visa, это список сотен классов – user3577990

+0

@ user3577990: check updated –

Смежные вопросы