2011-11-17 65 views
1

使用.each()來檢查數組,並嘗試使用replace()找到所有「<br>」並用「」(很簡單)替換,但沒有任何反應 - 沒有錯誤,它只是不取代。使用javascript/jquery從字符串數組中刪除文本

//get values of each td in row 
var values = ''; 
var tds = $(this).find('td'); 

$.each(tds, function(index, tditem) { 
    values = values + "td" + ':' + tditem.innerHTML + '\n'; 
    values = values.replace(/<br>/i, " "); 
}); 

承認,這將是更好的操作DOM元素(並且選擇一個答案作爲正確答案)我最終加入該到我的功能,因爲它只是使在短期我的生活更輕鬆:

values = values.replace(/<br>/i, " "); 

感謝@all

+2

innerHTML屬性不stanardised ,它已經從IE中複製過來,所以有許多變幻莫測的。我猜猜正則表達式會失敗,因爲大多數瀏覽器(儘管可能不是全部)會將標記名稱大寫爲BR。另外,有些XML-itis甚至在HTML文檔中也會將標記顯示爲「
」。如果你想刪除節點,最好使用DOM方法,而不是字符串操作。 – RobG

+0

不區分大小寫的搜索也失敗(/
/i)和瀏覽器的查看源顯示爲
themerlinproject

回答

4

您不需要進行字符串處理就可以實現此結果。這裏是最好的(右)的方式來做到這一點:

$(this).find('td br').remove(); 

的一般規則是:始終使用DOM,達到和操縱的元素,避免字符串分析這種操作。


編輯:

如果你不想改變現實的DOM元素,然後只克隆到像這樣的變量:

var HTML = ''; 
var tds = $(this).find('td').clone(); 
$(tds).find('br').remove(); 
HTML = $(tds).html(); 
alert(HTML); 
+0

請參閱我對該問題的編輯..謝謝 – themerlinproject

+0

編輯克隆的答案到一個變量,所以你不會搞亂真正的DOM元素。 – marcio

1

您應該使用DOM方法來消除DOM元素,像這樣:

function removeBRs(el) { 
    var brs = el.getElementsByTagName('br'); 

    while (brs.length) { 
    el.replaceChild(document.createTextNode(' '), brs[0]); 
    } 

} 

使用調用它:

removeBRs(this); 

直播,收藏品有一定的優勢。 :-)

+0

請參閱我對該問題的編輯..謝謝 – themerlinproject