É possível obter o texto destacado em um parágrafo de um site, por exemplo, usando jQuery?
É possível obter o texto destacado em um parágrafo de um site, por exemplo, usando jQuery?
Respostas:
Obter o texto que o usuário selecionou é relativamente simples. Não há benefício a ser obtido com o jQuery, pois você não precisa de nada além dos objetos window
e 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;
}
Se você estiver interessado em uma implementação que também lide com elementos de seleção <textarea>
e texty <input>
, use o seguinte. Como agora é 2016, estou omitindo o código necessário para o suporte ao IE <= 8, mas eu publiquei material para isso em muitos lugares no 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()
). A document.selection.type
verificação está testando se a seleção é uma seleção de texto em vez de uma seleção de controle. No IE, uma seleção de controle é uma seleção dentro de um elemento editável que contém um ou mais elementos (como imagens e controles de formulário) com contornos e alças de redimensionamento. Se você chamar .createRange()
essa seleção, obterá um ControlRange
ao invés de um TextRange
e ControlRange
s não têm text
propriedade.
selectionStart
ou selectionEnd
em um <input>
tipo de elemento (como "número") que não apoie-o (consulte jsfiddle.net/6zoposby/2 , por exemplo). Eu deixei a verificação para a existência de, selectionStart
para que o código não seja quebrado no IE <= 8. Admito que a verificação activeElement
esteja provavelmente exagerada agora. Eu uso slice
porque é mais poderoso (embora não seja útil aqui) e um pouco mais curto para digitar do que substring
.
Obtenha o texto destacado desta maneira:
window.getSelection().toString()
e, claro, um tratamento especial para ie:
document.selection.createRange().htmlText
document.selection
suporte foi removido no IE10 e substituído por window.getSelection
". Origem: connect.microsoft.com/IE/feedback/details/795325/…
Esta solução funciona se você estiver usando o chrome (não é possível verificar outros navegadores) e se o texto estiver localizado no mesmo elemento DOM:
window.getSelection().anchorNode.textContent.substring(
window.getSelection().extentOffset,
window.getSelection().anchorOffset)
Use window.getSelection().toString()
.
Você pode ler mais em developer.mozilla.org