JavaScript文字列で改行しないスペースはどのように表されますか?


111

これは明らかに機能していません:

X = $td.text();
if (X == ' ') {
X = '';
}

改行しないスペースやJavaScriptが気に入らないアンパサンドについて何かありますか?


1
どのように働いていませんか?Xで何をしますか?
Erik Forbes

ああ、私がX = $ td.html()と言っても機能します。
Phillip Senn、2011年

8
.text()マークアップが取り除かれていることを忘れないでください。したがって、 マークアップ以外の結果が見つかるとは思いません。
Brad Christie

1
私はここでは間違っているかもしれませんが、text()はhtmlエンティティを展開しませんか?
Dennis Kreminsky、2011年

@Brad-あなたはそれを答えにするべきだった。= P
エリックフォーブス

回答:


253

 HTMLエンティティです。実行すると.text()、すべてのHTMLエンティティが文字値にデコードされます。

エンティティを使用して比較する代わりに、実際の生の文字を使用して比較します。

var x = td.text();
if (x == '\xa0') { // Non-breakable space is char 0xa0 (160 dec)
  x = '';
}

または、Javascriptエスケープ形式で文字コードから手動で文字を作成することもできます。

var x = td.text();
if (x == String.fromCharCode(160)) { // Non-breakable space is char 160
  x = '';
}

詳細についてString.fromCharCodeは、こちらをご覧ください。

fromCharCode-MDC Doc Center

さまざまな文字セットの文字コードの詳細については、以下を参照してください。

Windows-1252文字セット
UTF-8文字セット


@cobbal:ほんとうに...それは実際にはもっと簡単な方法でしょう。
Andrew Moore

3
ワオ。この答えは非常に複雑です。正しいはずです。(私とJavaScriptは油と水のようなものです)。でも、もし私が激しく揺さぶられたら、一緒に混ぜます。
Phillip Senn

通常のスペースは壊れているため、「\ x20」ですが、「」を使用することをお勧めします。
Patrick Szalapski、

7

.text()マークアップが取り除かれていることを忘れないでください。したがって、 マークアップ以外の結果が見つかるとは思いません。

答えになりました...

var p = $('<p>').html('&nbsp;');
if (p.text() == String.fromCharCode(160) && p.text() == '\xA0')
    alert('Character 160');

代わりにマークアップに相当するASCIIが返されるため、アラートを表示します。


2
jQueryを使用すると$("<div>&nbsp;</div>").text().charCodeAt()160(nbspのユニコード)
cobbal

2

そのエンティティーは、ブラウザーがページをレンダリングするときに表すエンティティーに変換されます。JS(jQuery)はレンダリングされたページを読み取るため、このようなテキストシーケンスは発生しません。このような事態に遭遇する可能性がある唯一の方法は、エンティティを二重にエンコードする場合です。


0

のjQueryドキュメントはtext()言う

ブラウザごとにHTMLパーサーが異なるため、返されるテキストは改行やその他の空白で異なる場合があります。

$td.html()代わりに使用します。


これにより、ページのマークアップにHTMLタグが追加されます。たとえば、文字列 '<text>'はhtml要素になります。
Barh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.