2013-07-14 6 views
0

Я пытаюсь удалить любой элемент, если он является innerHTML, содержит определенную строку.Удалить все элементы, если они содержат строку

У меня есть этот код:

elemItem = document.getElementsByClassName("item"); 
elemItemPrice = document.getElementsByClassName("price"); 
    for (i = 0; i < elemItem.length; i++) { 
     if (elemItemPrice[i].innerHTML.trim().indexOf("Sold") != -1){ 
      elemItem[i].parentNode.removeChild(elemItem[i]) 
     } 
    } 

Вот HTML:

<div class="item"> 
<span class="price">Sold</span> 
</div> 
<div class="item"> 
<span class="price">Sold</span> 
</div> 
<div class="item"> 
<span class="price">$4.99</span> 
</div> 

Для меня, это только удаление 1 проданных тегов Div ..

+0

Как это 'Sold' текст попасть туда? Похоже, что это, вероятно, динамично, как на клиенте, так и на сервере. Если это так, было бы немного чище добавить класс 'sold' к элементу, чтобы вам не приходилось' .indexOf() '' .innerHTML'. –

+0

Если вы хотите протестировать текст, то innerHTML является неправильным свойством. Лучше использовать * textContent * или * innerText *. Кроме того, * getElementsByClassName * не поддерживается IE 8 и ниже. – RobG

ответ

4

Проблема заключается в том, при удалении элемента вы изменяете индексирование коллекции (т. е. элемент при i = 1 переходит на 0). Чтобы исправить это, перебирать в обратном направлении:

for (i = elemItem.length-1; i >= 0 ; i--) { 
+1

Dang! У меня были такие проблемы, прежде чем ... не особенно в JS, но никогда не думал о том, чтобы делать что-то в обратном направлении! :) – Robert

+1

Ах, спасибо! Сначала это не сработало, но я сделал это elemItem.length - 1. – ECMAScript

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