2011-11-17 70 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