Можно ли получить выделенный текст в абзаце веб-сайта, например, с помощью jQuery?
Можно ли получить выделенный текст в абзаце веб-сайта, например, с помощью jQuery?
Ответы:
Получить текст, выбранный пользователем, относительно просто. Там нет никакой выгоды , которые можно получить путем привлечения JQuery , так как вам не нужно ничего другого , чем window
и document
объектов.
function getSelectionText() {
var text = "";
if (window.getSelection) {
text = window.getSelection().toString();
} else if (document.selection && document.selection.type != "Control") {
text = document.selection.createRange().text;
}
return text;
}
Если вы заинтересованы в реализации, которая также будет работать с выборками <textarea>
и <input>
элементами texty , вы можете использовать следующее. Поскольку сейчас 2016, я опускаю код, необходимый для поддержки IE <= 8, но я опубликовал материал для этого во многих местах на SO.
function getSelectionText() {
var text = "";
var activeEl = document.activeElement;
var activeElTagName = activeEl ? activeEl.tagName.toLowerCase() : null;
if (
(activeElTagName == "textarea") || (activeElTagName == "input" &&
/^(?:text|search|password|tel|url)$/i.test(activeEl.type)) &&
(typeof activeEl.selectionStart == "number")
) {
text = activeEl.value.slice(activeEl.selectionStart, activeEl.selectionEnd);
} else if (window.getSelection) {
text = window.getSelection().toString();
}
return text;
}
document.onmouseup = document.onkeyup = document.onselectionchange = function() {
document.getElementById("sel").value = getSelectionText();
};
Selection:
<br>
<textarea id="sel" rows="3" cols="50"></textarea>
<p>Please select some text.</p>
<input value="Some text in a text input">
<br>
<input type="search" value="Some text in a search input">
<br>
<input type="tel" value="4872349749823">
<br>
<textarea>Some text in a textarea</textarea>
window.getSelection()
). document.selection.type
Проверка проверяет , что выбор является выделение текста , а не выбор управления. В IE выделение элемента управления - это выделение внутри редактируемого элемента, содержащего один или несколько элементов (таких как изображения и элементы управления формы) с контурами и маркерами изменения размера. Если вы вызовете .createRange()
такой выбор, вы получите ControlRange
скорее, чем TextRange
, и ControlRange
s не имеют text
свойства.
selectionStart
или selectionEnd
в <input>
типе элемента (например, «число»), который не поддержать его (см. , например, jsfiddle.net/6zoposby/2 ). Я оставил проверку на существование selectionStart
так, чтобы код не сломался в IE <= 8. Я допускаю, что проверка, activeElement
вероятно, излишняя. Я использую, slice
потому что это более мощный (хотя это не полезно здесь) и немного короче, чем тип substring
.
Получить выделенный текст следующим образом:
window.getSelection().toString()
и, конечно, особый режим для:
document.selection.createRange().htmlText
document.selection
поддержка была удалена в IE10 и заменена на window.getSelection
». Источник: connect.microsoft.com/IE/feedback/details/795325/...
Это решение работает, если вы используете Chrome (не можете проверить другие браузеры) и если текст находится в том же элементе DOM:
window.getSelection().anchorNode.textContent.substring(
window.getSelection().extentOffset,
window.getSelection().anchorOffset)
Использование window.getSelection().toString()
.
Вы можете прочитать больше на developer.mozilla.org