Подтвердить что ты не робот

JavaScript Получить реальную длину строки (без объектов)

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

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

4b9b3361

Ответ 1

<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 a better name?
    var el = document.createElement("div");
    el.innerHTML = str;
    return el.innerHTML.length;   
}

Ответ 2

Так как не существует решения, использующего jQuery:

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

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

Ответ 3

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

var strlen=string.replace(/&#?[a-zA-Z0-9]+;/g,' ').length;

Ответ 4

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

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

Ответ 5

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

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