[javascript] 깨지지 않는 공백은 JavaScript 문자열에서 어떻게 표현됩니까?

이것은 분명히 작동하지 않습니다.

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

깨지지 않는 공백이나 JavaScript가 좋아하지 않는 앰퍼샌드에 대한 것이 있습니까?



답변

 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 문서 센터

다른 문자 세트의 문자 코드에 대한 자세한 정보는 여기에서 확인할 수 있습니다.

Windows-1252 문자셋
UTF-8 문자셋


답변

.text()마크 업 을 제거하므로 마크 업  이 아닌 결과에서 찾을 수 없다고 생각합니다 .

답변으로 만들어졌습니다 ….

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

대신 마크 업에 해당하는 ASCII가 반환되므로 경고를 표시합니다.


답변

해당 엔티티는 브라우저가 페이지를 렌더링 할 때 나타내는 문자로 변환됩니다. JS (jQuery)는 렌더링 된 페이지를 읽으므로 이러한 텍스트 시퀀스가 ​​발생하지 않습니다. 이러한 문제를 만날 수있는 유일한 방법은 엔터티를 이중 인코딩하는 경우입니다.


답변

대한이의 jQuery 문서 text()말한다

다른 브라우저에서 HTML 파서의 변형으로 인해 반환되는 텍스트는 줄 바꿈 및 기타 공백이 다를 수 있습니다.

$td.html()대신 사용하겠습니다 .


답변