Как посчитать, сколько символов в текстовом узле фактически отображается на веб-странице? - PullRequest
2 голосов
/ 26 января 2012

Давайте предположим, что я прочитал содержимое текстового узла следующим образом:

s = current_node.getSelection().anchorNode.nodeValue;

Как лучше всего подсчитать, сколько символов отображается на веб-странице благодаря этому одному узлу? Я знаю, что, например,   будет отображаться в виде буквенной строки, поэтому нет необходимости искать их. Это все, что мне нужно сделать, чтобы посчитать несколько пробелов подряд одним символом? Есть ли что-то еще, что мне нужно высматривать?

Ответы [ 2 ]

3 голосов
/ 26 января 2012

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

var node = current_node.getSelection().anchorNode;
var text = node.textContent || node.innerText;
var length = text.length;

Это будет иметь уже преобразованные объекты в их обычные символы и не будет включать в себя HTML-теги. Несколько пробелов получатся как несколько пробелов - вот как работает эта функция в браузере. Если вы были почти уверены, что в HTML нет нескольких   последовательностей, вы можете свернуть несколько пробелов следующим образом:

var node = current_node.getSelection().anchorNode;
var text = node.textContent || node.innerText;
text = text.replace(/ +/g, " ");
var length = text.length;

Пример здесь: http://jsfiddle.net/jfriend00/FpsGq/

0 голосов
/ 26 января 2012

Это зависит от того, как буквально вы имеете в виду, чтобы определить «отображается на веб-странице».Если символы переполняют контейнер с переполнением: скрытый, они не будут отображаться на веб-странице (из-за того, что они скрыты правилом CSS).

Кроме того, сгущая серию пробелов, игнорируя экранированныепереводы строки и возврат каретки (если это применимо, как в

), а также сжатые экранированные символы - все, что вам нужно.Я не могу думать ни о каких других крайних случаях, по крайней мере. 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...