Khoảng trắng không ngắt được biểu diễn như thế nào trong một chuỗi JavaScript?


111

Điều này dường như không hoạt động:

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

Có điều gì đó về khoảng trắng không ngắt hoặc ký hiệu và mà JavaScript không thích?


1
Không hoạt động như thế nào? Sau đó bạn đang làm gì với X?
Erik Forbes

Ồ, nếu tôi nói X = $ td.html () thì nó hoạt động.
Phillip Senn

8
Hãy nhớ rằng .text()loại bỏ đánh dấu, vì vậy tôi không tin rằng bạn sẽ tìm thấy  trong một kết quả không đánh dấu.
Brad Christie

1
Tôi có thể sai ở đây, nhưng văn bản () không mở rộng các thực thể html?
Dennis Kreminsky

@Brad - lẽ ra bạn nên đưa ra câu trả lời đó. = P
Erik Forbes

Câu trả lời:


253

 là một thực thể HTML. Khi thực hiện .text(), tất cả các thực thể HTML đều được giải mã thành các giá trị ký tự của chúng.

Thay vì so sánh bằng cách sử dụng thực thể, hãy so sánh bằng cách sử dụng ký tự thô thực tế:

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

Hoặc bạn cũng có thể tạo ký tự từ mã ký tự theo cách thủ công ở dạng thoát Javascript:

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

Thông tin thêm về String.fromCharCodecó sẵn tại đây:

fromCharCode - Trung tâm Tài liệu MDC

Thông tin thêm về mã ký tự cho các bảng mã khác nhau có sẵn tại đây:

Bộ mã Windows-1252 Bộ
mã UTF-8


@cobbal: Rất đúng ... Đó thực sự là cách đơn giản hơn.
Andrew Moore

3
Chà. Câu trả lời này rất phức tạp, nó phải được chính xác! (Tôi và JavaScript giống như dầu và nước). Nhưng có lẽ nếu tôi bị rung động dữ dội thì chúng tôi sẽ hòa vào nhau.
Phillip Senn

Khoảng trắng thông thường đang bị phá vỡ, vì vậy nó là '\ x20', nhưng tốt hơn nên sử dụng ''.
Patrick Szalapski

7

Hãy nhớ rằng .text()loại bỏ đánh dấu, vì vậy tôi không tin rằng bạn sẽ tìm thấy  trong một kết quả không đánh dấu.

Tạo ra một câu trả lời ....

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

Hiển thị một cảnh báo, thay vào đó, ASCII tương đương với đánh dấu được trả về.


2
Sử dụng jQuery, chúng ta có thể thấy điều đó $("<div>&nbsp;</div>").text().charCodeAt()mang lại 160(unicode cho nbsp)
cobbal

2

Thực thể đó được chuyển đổi thành ký tự mà nó đại diện khi trình duyệt hiển thị trang. JS (jQuery) đọc trang được kết xuất, do đó nó sẽ không gặp phải một chuỗi văn bản như vậy. Cách duy nhất nó có thể gặp phải điều như vậy là nếu bạn đang mã hóa kép các thực thể.


0

Tài liệu jQuery cho text()nói

Do các biến thể trong trình phân tích cú pháp HTML trong các trình duyệt khác nhau, văn bản trả về có thể khác nhau ở dòng mới và khoảng trắng khác.

Tôi muốn sử dụng $td.html()thay thế.


Điều này sẽ thêm các thẻ html vào đánh dấu trang của bạn. Ví dụ: chuỗi '<text>' sẽ là một phần tử html.
Barh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.