Вы можете использовать DOM Range
, чтобы сделать это:
function getCharOffsetRelativeTo(container, node, offset) {
var range = document.createRange();
range.selectNodeContents(container);
range.setEnd(node, offset);
return range.toString().length;
}
Пример:
var sel = window.getSelection();
var pre = document.getElementById("your_pre_id");
var offset = getCharOffsetRelativeTo(pre, sel.anchorNode, sel.anchorOffset);
Предостережения:
- Это будет работать во всех основных браузерах, кроме IE <= 8. Если вам нужно решение для IE, тогда я могу его предоставить. </li>
- Эта функция будет считать символы внутри тегов
<script>
или <style>
и невидимыхэлементы (например, скрытые с помощью CSS display: none
).