删除javascript中的非中断空格

时间:2013-10-23 18:25:17

标签: javascript jquery html

我无法从字符串中删除空格。首先我将div转换为text();以删除标签(有效),然后我尝试删除字符串中的“&nbsp”部分,但它不起作用。我知道我做错了什么。感谢。

newStr = $('#myDiv').text();
newStr = newStr.replace(/ /g,'');

$('#myText').val(newStr);


<html>
  <div id = "myDiv"><p>remove&nbsp;space</p></div>
  <input type = "text" id = "myText" />
</html>

2 个答案:

答案 0 :(得分:17)

当您使用text函数时,您不会获取HTML而是文本:&nbsp;实体已更改为空格。

所以只需替换空格:

var str = " a     b   ", // bunch of NBSPs 
    newStr = str.replace(/\s/g,'');
    
console.log(newStr)

如果您只想替换来自&nbsp;的空格,请在转换为文字之前进行替换:

newStr = $($('#myDiv').html().replace(/&nbsp;/g,'')).text();

答案 1 :(得分:10)

.text() / textContent不包含HTML实体(例如&nbsp;),这些实体作为文字字符返回。这是使用non-breaking space Unicode转义序列的正则表达式:

var newStr = $('#myDiv').text().replace(/\u00A0/g, '');
$('#myText').val(newStr);

Demo

也可以在正则表达式中使用文字不间断空格字符而不是转义序列,但是在这种情况下我发现转义序列更加清晰。但是,评论无法解决任何问题。

也可以使用.html() / innerHTML来检索包含HTML实体的HTML,如@Dystroy的答案。


以下是我的原始答案,我误解了OP的用例。如果有人需要从DOM元素的文本内容中删除&nbsp;

,我会将其保留在此处

[...]但是,请注意,重新设置元素的.html() / innerHTML意味着删除所有与之关联的侦听器和数据。

所以这里是一个递归解决方案,只改变文本节点的文本内容,而不重新分析HTML或任何副作用。

function removeNbsp($el) {
  $el.contents().each(function() {
    if (this.nodeType === 3) {
      this.nodeValue = this.nodeValue.replace(/\u00A0/g, '');
    } else {
      removeNbsp( $(this) );
    }
  });
}
removeNbsp( $('#myDiv') );

Demo