Как получить выделенный текст из элемента управления textbox с помощью javascript
У меня есть текстовое поле и кнопка ссылки. Когда я пишу текст, выберите некоторые из них, а затем нажмите кнопку "Ссылка", выделенный текст из текстового поля должен отображаться с помощью messagebox.
Как я могу это сделать?
когда я нажимаю кнопку отправки для текстового поля ниже, окно сообщения должно показывать Lorem ipsum. Потому что "Lorem ipsum" выбран в области.
Если я выбираю любой текст со страницы и нажимаю кнопку "Отправить", он работает, но если я напишите текст в textbox и сделайте это, это не так. Потому что, когда я нажимаю на другое пространство, выбор текстового поля отменяется.
теперь проблема в том, что, когда я выбираю текст из textbox и нажимаю любой другой элемент управления или пробел, текст, который выбран, должен быть выбран.
Как это сделать?
5 ответов
хорошо, вот код, который у меня есть:
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 () вызов, чтобы вернуть textarea фокус, чтобы выбор был повторно активирован.
[UPDATE] я получил правильный результат (содержимое выбора) с onKeyDown событие:
document.onkeydown = function (e) { ShowSelection(); }
таким образом, код правильный. Опять же, проблема заключается в том, чтобы получить выбор при нажатии на кнопку... Я продолжаю поиски.
[UPDATE] у меня нет успеха с кнопкой, нарисованной с помощью li
тег, потому что, когда мы нажимаем на него, IE отменяет предыдущий выбор. Приведенный выше код работает с простым , хотя...
вот гораздо более простое решение, основанное на том, что выбор текста происходит на 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>
это работает во всех браузерах.
если вы также хотите обрабатывать выбор с помощью клавиатуры, добавьте другой прослушиватель событий для keyup
, С тем же кодом.
если бы не этот Firefox ошибка подана еще в 2001 году (Да, 14 лет назад), мы можем заменить значение назначенное на window.mySelection
С window.getSelection().toString()
, который работает в IE9+ и всех современных браузерах, а также получает выбор, сделанный в нетекстовых частях DOM.
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" />
для Opera, Firefox и Safari, вы можете использовать следующую функцию:
function getTextFieldSelection(textField) {
return textField.value.substring(textField.selectionStart, textField.selectionEnd);
}
затем вы просто передаете ссылку на элемент текстового поля (например, textarea или элемент ввода) функции:
alert(getTextFieldSelection(document.getElementsByTagName("textarea")[0]));
или, если вы хотите, чтобы
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());
например.
большой поклонник 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="https://github.com/dwieeb/jquery-textrange">
jquery-textrange
</a><br/>
<textarea id="textareaId" >Some random content.</textarea><br/>
<input type="text" id="selectedId" ></input>
</body>
</html>