.text()
/textContent
には HTML エンティティ ( など
) が含まれていないため、これらはリテラル文字として返されます。改行なしのスペースUnicode エスケープ シーケンスを使用した正規表現を次に示します。
var newStr = $('#myDiv').text().replace(/\u00A0/g, '');
$('#myText').val(newStr);
デモ
正規表現のエスケープ シーケンスの代わりにリテラルの改行なしのスペース文字を使用することもできますが、この場合はエスケープ シーケンスの方が明確です。ただし、コメントで解決しないことはありません。
@Dystroy の回答のように、.html()
/を使用して HTML エンティティを含む HTML を取得することもできます。innerHTML
以下は、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') );
デモ