Мне нужно определить длину строки, которая может содержать html-сущности.
Например, "& darr;" (& darr;) вернет длину 6, что является правильным, но я хочу, чтобы эти объекты считались только 1 символом.
Мне нужно определить длину строки, которая может содержать html-сущности.
Например, "& darr;" (& darr;) вернет длину 6, что является правильным, но я хочу, чтобы эти объекты считались только 1 символом.
<div id="foo">↓</div>
alert(document.getElementById("foo").innerHTML.length); // alerts 1
Итак, основываясь на этом обосновании, создайте div, добавьте в него свою смешанную строку, вытащив HTML и проверив длину.
var div = document.createElement("div");
div.innerHTML = "↓↓↓↓";
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;
}
Так как не существует решения, использующего jQuery:
var str = 'lol&';
alert($('<span />').html(str).text().length); // alerts 4
Использует тот же подход, что и karim79, но никогда не добавляет созданный элемент в документ.
В большинстве случаев вы можете предположить, что амперсанд, за которым следуют буквы, или возможные "#" и цифры, за которыми следует точка с запятой, - это один символ.
var strlen=string.replace(/&#?[a-zA-Z0-9]+;/g,' ').length;
Если вы используете javascript в браузере, я бы предложил использовать его, чтобы помочь вам. Вы можете создать элемент и установить его innerHTML как строку, содержащую HTML-сущности. Затем извлеките содержимое этого элемента, который вы только что создали в виде текста.
Вот пример (использует Mootools): http://jsfiddle.net/mqchen/H73EV/
К сожалению, JavaScript не поддерживает кодирование или декодирование HTML-объектов, что вам нужно сделать, чтобы получить "реальную" длину строки. Я смог найти эту стороннюю библиотеку, которая способна декодировать и кодировать объекты HTML, и, похоже, она работает достаточно хорошо, но нет гарантии того, насколько она будет выполнена.