我无法从字符串中删除空格。首先我将div转换为text();
以删除标签(有效),然后我尝试删除字符串中的“ 
”部分,但它不起作用。我知道我做错了什么。感谢。
newStr = $('#myDiv').text();
newStr = newStr.replace(/ /g,'');
$('#myText').val(newStr);
<html>
<div id = "myDiv"><p>remove space</p></div>
<input type = "text" id = "myText" />
</html>
答案 0 :(得分:17)
当您使用text
函数时,您不会获取HTML而是文本:
实体已更改为空格。
var str = " a b ", // bunch of NBSPs
newStr = str.replace(/\s/g,'');
console.log(newStr)
如果您只想替换来自
的空格,请在转换为文字之前进行替换:
newStr = $($('#myDiv').html().replace(/ /g,'')).text();
答案 1 :(得分:10)
.text()
/ textContent
不包含HTML实体(例如
),这些实体作为文字字符返回。这是使用non-breaking space Unicode转义序列的正则表达式:
var newStr = $('#myDiv').text().replace(/\u00A0/g, '');
$('#myText').val(newStr);
也可以在正则表达式中使用文字不间断空格字符而不是转义序列,但是在这种情况下我发现转义序列更加清晰。但是,评论无法解决任何问题。
也可以使用.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') );