lightalex
@lightalex

Как адаптировать функцию под JQuery?

Всем привет!
Есть функция JS:
function getCursorPosition( ctrl ) {
        var CaretPos = 0;
        if ( document.selection ) {
            ctrl.focus ();
            var Sel = document.selection.createRange();
            Sel.moveStart ('character', -ctrl.value.length);
            CaretPos = Sel.text.length;
        } else if ( ctrl.selectionStart || ctrl.selectionStart == '0' ) {
            CaretPos = ctrl.selectionStart;
        }
        return CaretPos;
    }

Попытался перевести в метод JQuery:
(function() {
	var $=jQuery
	$.fn.getCaret=function() {
        var CaretPos = 0;
        if ( document.selection ) {
            this.focus ();
            var Sel = document.selection.createRange();
            Sel.moveStart ('character', -this.value.length);
            CaretPos = Sel.text.length;
        } else if ( this.selectionStart || this.selectionStart == '0' ) {
            CaretPos = this.selectionStart;
        }
        return CaretPos;
	};
})();

Теперь всегда возвращается ноль
Предполагаю что проблема с передачей объекта
Вопрос
Кроме того что руки не оттуда растут, что не так?

P.S. Если что это функция определения позиции курсора в текстовом поле и до моих экспериментов она работала правильно...
  • Вопрос задан
  • 336 просмотров
Решения вопроса 1
trushka
@trushka
Потому что this в данном случае будет не элемент, а набор элементов jQuery. Я б сделал где-то так:
$.fn.getCaret=function() {
      if (!this[0]) return 0; // если в наборе нет элементов, например, несуществующий селектор
      if ( document.selection ) {
          this.focus();
          var Sel = document.selection.createRange();
          Sel.moveStart ('character', -this.val().length);
          return Sel.text.length;
      } else  {
          return this[0].selectionStart || 0;
      }
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы