JavaScript Получить реальную длину строки (без сущностей) - PullRequest
17 голосов
/ 25 января 2011

Мне нужно определить длину строки, которая может содержать html-сущности.

Например, "& darr;" (& darr;) вернул бы длину 6, что правильно, но я хочу, чтобы эти объекты учитывались только как 1 символ.

Ответы [ 5 ]

11 голосов
/ 25 января 2011
<div id="foo">&darr;</div>

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

Итак, на основании этого обоснования создайте div, добавьте к нему строку со смешанными объектами, извлеките HTML и проверьте длину.

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

Попробуйтеэто здесь.

Возможно, вы захотите включить это в функцию для удобства, например:

function realLength(str) { // maybe there's a better name?
    var el = document.createElement("div");
    el.innerHTML = str;
    return el.innerHTML.length;   
}
3 голосов
/ 25 января 2011

В большинстве случаев можно предположить, что амперсанд, за которым следуют буквы, или возможные символы «#» и цифры, а затем точка с запятой, - это один символ.

3 голосов
/ 25 января 2011

Поскольку пока нет решения с использованием jQuery:

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

Использует тот же подход, что и karim79, но он никогда не добавляет созданный элемент в документ.

1 голос
/ 25 января 2011

Если вы используете javascript в браузере, я бы посоветовал вам его использовать.Вы можете создать элемент и установить его innerHTML в качестве вашей строки, содержащей HTML-сущности.Затем извлеките содержимое этого элемента, который вы только что создали, как текст.

Вот пример (использует Mootools): http://jsfiddle.net/mqchen/H73EV/

0 голосов
/ 25 января 2011

К сожалению, JavaScript изначально не поддерживает кодирование или декодирование сущностей HTML, что вам необходимо сделать, чтобы получить «реальную» длину строки.Мне удалось найти эту стороннюю библиотеку, которая способна декодировать и кодировать объекты HTML, и она, кажется, работает достаточно хорошо, но нет никакой гарантии, насколько она будет завершена .

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

...