В общем есть div с текстом, контент дива редактировать нельзя, но при клике на див нужно определить позицию курсора(тоже див элемент), с определением строки проблем нет, а вот с определением отступа слева есть проблема: у каждого символа своя длина и как определить перед каким символом при клике нужно поставить курсор я себе плохо представляю.
Я пытаюсь написать свой редактор для кода и всё ради этого.
/*
interger n - номер активной строки
float x - координата Х мыши при клике
fr.linesText содержит тексты всех строк
$("#redactor_symbol") - span элемент
*/
var getColumn = function(n, x){
var text = fr.linesText[n].replace(/<\/?[^>]+>/g, '').replace(/\</g, '<'),
//регуляркой убираем хтмл теги и заменяем < на нормальный символ
prev = 0,
next = 0;
for(var i = 0, len = text.length+1; i < len;i++){
if(text.charAt(i) == ' '){
next += 4;
continue;
}
if(i != 0)
prev = next - $("#redactor_symbol").html(text.charAt(i-1)).width();
next += $("#redactor_symbol").html(text.charAt(i)).width() + 0.2;
if(x >= prev && x <= next){
break;
}
}
var big = next - x, lit = x - prev;
if((big < lit) || (big == lit)){
return {left: next, num: i};
}
else{
return {left: prev, num: i};
}
}
Но скрипт работает через раз, а в строках с большими буквами вообще не работает