Как получить выделенный текст из управления текстовым полем с помощью javascript
У меня есть текстовое поле и кнопка ссылки.
Когда я пишу какой-то текст, затем выберите некоторые из них, а затем нажмите кнопку ссылки, выделенный текст из текстового поля должен быть показан в виде сообщения.
Как я могу это сделать?
Когда я нажимаю кнопку отправки для текстового поля ниже, в окне сообщения должен отображаться Lorem ipsum. Потому что в области выбрано "Lorem ipsum".
Если я выберу любой текст со страницы и нажмите кнопку отправки, он будет работать, но если я напишу текст в текстовое поле и сделаю это, это не так. Потому что, когда я нажимаю на другое место, выбор текстового поля отменяется.
Теперь проблема заключается в том, что, когда я выбираю текст из текстового поля и выбираю любой другой элемент управления или пробел, текст, который выбран, должен быть выбран.
Как это сделать?
Ответы
Ответ 1
ОК, вот код, который у меня есть:
function ShowSelection()
{
var textComponent = document.getElementById('Editor');
var selectedText;
if (textComponent.selectionStart !== undefined)
{// Standards Compliant Version
var startPos = textComponent.selectionStart;
var endPos = textComponent.selectionEnd;
selectedText = textComponent.value.substring(startPos, endPos);
}
else if (document.selection !== undefined)
{// IE Version
textComponent.focus();
var sel = document.selection.createRange();
selectedText = sel.text;
}
alert("You selected: " + selectedText);
}
Проблема, хотя код, который я даю для IE, указан на множестве сайтов, я не могу заставить его работать над моей копией IE6 в моей текущей системе. Возможно, это сработает для вас, почему я его даю.
Трюк, который вы ищете, вероятно, является вызовом .focus(), чтобы вернуть текстуре в фокус, чтобы выбор был повторно активирован.
[UPDATE] Я получил правильный результат (содержимое выделения) с событием onKeyDown:
document.onkeydown = function (e) { ShowSelection(); }
Итак, код правильный. Опять же, проблема заключается в том, чтобы получить выделение при нажатии на кнопку... Я продолжаю поиск.
[UPDATE] Я не добился успеха при нажатии кнопки с тегом li
, потому что, когда мы нажимаем на нее, IE отменяет выбор предыдущего выбора. Вышеупомянутый код работает с простой кнопкой input
, хотя...
Ответ 2
Здесь гораздо более простое решение, основанное на том, что выбор текста происходит в mouseup, поэтому мы добавляем к нему прослушиватель событий:
document.querySelector('textarea').addEventListener('mouseup', function () {
window.mySelection = this.value.substring(this.selectionStart, this.selectionEnd)
// window.getSelection().toString();
});
<textarea>
Select some text
</textarea>
<a href="#" onclick=alert(mySelection);>Click here to display the selected text</a>
Ответ 3
function disp() {
var text = document.getElementById("text");
var t = text.value.substr(text.selectionStart, text.selectionEnd - text.selectionStart);
alert(t);
}
<TEXTAREA id="text">Hello, How are You?</TEXTAREA><BR>
<INPUT type="button" onclick="disp()" value="Select text and click here" />
Ответ 4
Я хочу, чтобы вы смотрели на свойства selectstart/selectionend поля ввода для firefox и textrange в IE
некоторые ссылки:
http://www.dedestruct.com/2008/03/22/howto-cross-browser-cursor-position-in-textareas/
Ответ 5
Для Opera, Firefox и Safari вы можете использовать следующую функцию:
function getTextFieldSelection(textField) {
return textField.value.substring(textField.selectionStart, textField.selectionEnd);
}
Затем вы просто передаете ссылку на элемент текстового поля (например, текстовое поле или элемент ввода) в функцию:
alert(getTextFieldSelection(document.getElementsByTagName("textarea")[0]));
Или, если вы хотите <textarea> и <input> для собственной функции getSelection():
HTMLTextAreaElement.prototype.getSelection = HTMLInputElement.prototype.getSelection = function() {
var ss = this.selectionStart;
var se = this.selectionEnd;
if (typeof ss === "number" && typeof se === "number") {
return this.value.substring(this.selectionStart, this.selectionEnd);
}
return "";
};
Затем вы просто выполните:
alert(document.getElementsByTagName("textarea")[0].getSelection());
alert(document.getElementsByTagName("input")[0].getSelection());
например.
Ответ 6
Большой вентилятор jQuery-textrange
Ниже представлен очень маленький, самодостаточный, пример. Вниз загрузите jquery-textrange.js и скопируйте в ту же папку.
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>jquery-textrange</title>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script src="jquery-textrange.js"></script>
<script>
/* run on document load **/
$(document).ready(function() {
/* run on any change of 'textarea' **/
$('#textareaId').bind('updateInfo keyup mousedown mousemove mouseup', function() {
/* The magic is on this line **/
var range = $(this).textrange();
/* Stuff into selectedId. I wanted to store this is a input field so it can be submitted in a form. **/
$('#selectedId').val(range.text);
});
});
</script>
</head>
<body>
The smallest example possible using
<a href="#" onclick="location.href='https://github.com/dwieeb/jquery-textrange'; return false;">
jquery-textrange
</a><br/>
<textarea id="textareaId" >Some random content.</textarea><br/>
<input type="text" id="selectedId" ></input>
</body>
</html>