2013-07-14 60 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> 

對於我來說,這只是去掉出售div標籤的1 ..

+0

是如何'Sold'文本到達那裏?似乎它可能是動態的,無論是在客戶端還是服務器端。如果是這樣,那麼向元素添加'sold'類會更簡潔一些,這樣就不必''.indexOf()'.innerHTML'。 –

+0

如果要測試文本,則innerHTML是使用的錯誤屬性。最好使用* textContent *或* innerText *。另外,IE8及更低版本不支持* getElementsByClassName *。 – RobG

回答

4

的問題是,當你刪除一個項目時,你改變了該集合的索引(即i = 1處的項目移動到0)。爲了解決這個問題,向後遍歷:

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

當!我以前遇到過這類問題......不是特別在JS中,但從來沒有想過要回退! :) – Robert

+1

啊,謝謝!它起初並不奏效,但後來我把它變成了elemItem.length - 1。 – ECMAScript

相關問題