2015-03-30 2 views
0

Я получаю undefined is not a function ошибку, когда я пытаюсь запустить следующий код:Заглавное выделение текста в текстовом поле

$(document).ready(function() { 
    $("#textarea").select(function() { 
     var selection = window.getSelection(); 
     $("#upper").click(function() { 
      // alert(selection); 
      var upper = selection.toUpperCase(); 
      var text = $("#textarea").text(); 
      $("#textarea").html(text.replace(selection, upper)); 
     }); 
    }); 
}); 

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

+0

jsfiddle очень отличается от кода здесь - а также имеет синтаксические ошибки .. что это такое? –

+0

Извинения, ссылка была обновлена. – mpdc

+0

Ваша первая ссылка была фактически менее сломанной. Теперь у вас есть вложенные обработчики событий (обычно это очень плохой знак). –

ответ

4

getSelection возвращает объект. Вам нужно позвонить toString().

$(document).ready(function() { 
    var selection; 
    $("#textarea").select(function() { 
     selection = window.getSelection().toString(); 
    }); 
    $("#upper").click(function() { 
     if (selection) { 
      var upper = selection.toUpperCase(); 
      var text = $("#textarea").text(); 
      $("#textarea").html(text.replace(selection, upper)); 
     } 
    }); 
}); 

JSFiddle: http://jsfiddle.net/TrueBlueAussie/8syb2d8j/4/

Примечания:

  • ваши обработчики событий были вложены (как правило, это плохая идея)
  • я добавил проверку, чтобы убедиться, что есть перед тем, как попытаться взломать его.
  • как, возможно, текст, который вы выделите, может иметь более одного, используя replace на самом деле не очень хорошее решение. Попробуйте выделить второй i и посмотреть, что я имею в виду. Вы должны использовать свойство объекта выбора вместо того, чтобы выработать точную часть строки, которая была выбрана,

После просмотра вокруг для портативных решений, я нашел jQuery TextRange plugin, который, основываясь на the demo более чем достаточно для этой проблемы.

+0

Спасибо. Гнездо было потому, что я думал, что моя ошибка имеет какое-то отношение к переменной области! – mpdc

+0

@mpdc: Нет, просто переместите переменную обратно на уровень. Обратите внимание на проблему, которую я отметил в конце. Возможно, вам захочется переосмыслить, как вы это делаете. :) –

+0

Я смотрю на второй ответ здесь для вдохновения: http://stackoverflow.com/questions/17836488/jquery-surround-highlighted-text-with-span :) Спасибо. – mpdc

Смежные вопросы