.text()
/textContent
不包含HTML实体(如
),这些返回为文字字符。下面是一个使用non-breaking space Unicode转义序列的正则表达式:
var newStr = $('#myDiv').text().replace(/\u00A0/g, '');
$('#myText').val(newStr);
Demo
也可以使用文字非打破空间字符,而不是在正则表达式转义序列,但是我发现逃生在这种情况下序列更清晰。不过,评论无法解决。
也可以使用.html()
/innerHTML
来检索包含HTML实体的HTML,如@ Dystroy的答案。
下面是我的原始答案,我错误地解释了OP的用例。我会离开这里万一有人需要从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'));
Demo
'' 将不被理解为在你的JS文件中的HTML实体。 – ComFreek
' '是一个HTML实体 - 在'.text()'的返回中它与白色空间相同。 –
@FabrícioMatté我不这么认为。 将被转换为真正的[非破坏空间](http://en.wikipedia.org/wiki/Non-breaking_space)。 – ComFreek