删除javascript中的非中断空格

use*_*429 9 html javascript jquery

我在从字符串中删除空格时遇到问题.首先我将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>
Run Code Online (Sandbox Code Playgroud)

Den*_*ret 17

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

所以简单地替换空格:

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

如果要&nbsp;在转换为文本之前仅替换来自替换的空格:

newStr = $($('#myDiv').html().replace(/&nbsp;/g,'')).text();
Run Code Online (Sandbox Code Playgroud)

  • 这也取代了所有其他类型的空格! (2认同)

Fab*_*tté 12

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

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

演示

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

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


以下是我的原始答案,我误解了OP的用例.我会留在这里,以防任何人需要&nbsp;从DOM元素的文本内容中删除

[...]但是,请注意,重新设置元素的.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') );
Run Code Online (Sandbox Code Playgroud)

演示