16

文字列からスペースを削除するのに問題があります。最初に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>
4

2 に答える 2

21

.text()/textContentには HTML エンティティ ( など&nbsp;) が含まれていないため、これらはリテラル文字として返されます。改行なしのスペースUnicode エスケープ シーケンスを使用した正規表現を次に示します。

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

デモ

正規表現のエスケープ シーケンスの代わりにリテラルの改行なしのスペース文字を使用することもできますが、この場合はエスケープ シーケンスの方が明確です。ただし、コメントで解決しないことはありません。

@Dystroy の回答のように、.html()/を使用して HTML エンティティを含む HTML を取得することもできます。innerHTML


以下は、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') );

デモ

于 2013-10-23T18:38:43.427 に答える