2011-01-24 23 views

Trả lời

11
<div id="foo">&darr;</div> 

alert(document.getElementById("foo").innerHTML.length); // alerts 1 

Vì vậy, dựa trên lý do đó, tạo div, nối chuỗi thực thể hỗn hợp của bạn vào đó, trích xuất HTML và kiểm tra độ dài.

var div = document.createElement("div"); 
div.innerHTML = "&darr;&darr;&darr;&darr;"; 
alert(div.innerHTML.length); // alerts 4 

Try it here.

Bạn có thể muốn đưa rằng trong một chức năng cho thuận tiện, ví dụ:

function realLength(str) { // maybe there's a better name? 
    var el = document.createElement("div"); 
    el.innerHTML = str; 
    return el.innerHTML.length; 
} 
+3

Giải pháp hấp dẫn. –

+0

Tôi [sửa đổi fiddle] (http://jsfiddle.net/e89hJ/1/) và thử nghiệm giải pháp này chống lại các đầu vào và đầu ra trên giải pháp dựa trên thư viện tôi đăng và có một số mâu thuẫn. Cụ thể, tôi đã nhập một đầu vào được mã hóa và nhận được 110 ký tự, sau đó nhập vào một đầu vào được giải mã của cùng một dữ liệu và có 96 ký tự. Không chắc chắn tại sao chính xác, nhưng nó có thể là giá trị kiểm tra trên. –

+0

@Nathan Taylor - Sự không thống nhất có thể có thể được gây ra bởi '.val' của jQuery hoặc ngắt dòng. – karim79

0

Thật không may, JavaScript không natively hỗ trợ mã hóa hoặc giải mã các đối tượng HTML, đó là những gì bạn sẽ cần phải làm để có được độ dài chuỗi 'thực'. Tôi đã có thể tìm thấy thư viện của bên thứ ba có thể giải mã và mã hóa các thực thể HTML và nó dường như hoạt động tốt, nhưng không đảm bảo cách hoàn thành nó sẽ như thế nào.

http://www.strictly-software.com/htmlencode

3

Kể từ khi không có giải pháp sử dụng jQuery nào:

var str = 'lol&amp;'; 
alert($('<span />').html(str).text().length); // alerts 4 

Sử dụng phương pháp tương tự như karim79, nhưng nó không bao giờ bổ sung thêm các yếu tố tạo ra để tài liệu.

+2

Có lẽ tôi đang thiếu một cái gì đó nhưng câu trả lời của karim cũng không thêm phần tử vào tài liệu. –

+0

Hrm ok, có vẻ như tôi chỉ đọc một nửa câu trả lời của anh ấy (hoặc anh ấy đã chỉnh sửa nó) – ThiefMaster

1

Nếu bạn đang chạy javascript trong trình duyệt, tôi khuyên bạn nên sử dụng nó để giúp bạn. Bạn có thể tạo một phần tử và đặt innerHTML của nó thành chuỗi chứa các thực thể HTML. Sau đó trích xuất nội dung của phần tử mà bạn vừa tạo dưới dạng văn bản.

Dưới đây là một ví dụ (sử dụng Mootools): http://jsfiddle.net/mqchen/H73EV/

2

Bạn có thể cho hầu hết các mục đích giả thiết rằng một dấu tiếp theo chữ cái, hoặc có thể '#' và con số, theo sau là một dấu chấm phẩy, là một ký tự.

var strlen=string.replace(/&#?[a-zA-Z0-9]+;/g,' ').length; 
Các vấn đề liên quan