Показать сообщение отдельно
  #1 (permalink)  
Старый 02.06.2014, 21:53
Аспирант
Отправить личное сообщение для Chiz Посмотреть профиль Найти все сообщения от Chiz
 
Регистрация: 18.04.2012
Сообщений: 43

Определить номер символа по клику
В общем есть div с текстом, контент дива редактировать нельзя, но при клике на див нужно определить позицию курсора(тоже див элемент), с определением строки проблем нет, а вот с определением отступа слева есть проблема: у каждого символа своя длина и как определить перед каким символом при клике нужно поставить курсор я себе плохо представляю.
Я пытаюсь написать свой редактор для кода и всё ради этого.

/*
 interger n - номер активной строки
 float x - координата Х мыши при клике
 fr.linesText содержит тексты всех строк
 $("#redactor_symbol") - span элемент
*/
var getColumn = function(n, x){
    var text = fr.linesText[n].replace(/<\/?[^>]+>/g, '').replace(/\&lt;/g, '<'),
              //регуляркой убираем хтмл теги и заменяем &lt; на нормальный символ
		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};
	}
}

Но скрипт работает через раз, а в строках с большими буквами вообще не работает
Ответить с цитированием