Czy można uzyskać wyróżniony tekst w akapicie strony internetowej, np. Przy użyciu jQuery?
Czy można uzyskać wyróżniony tekst w akapicie strony internetowej, np. Przy użyciu jQuery?
Odpowiedzi:
Uzyskanie tekstu wybranego przez użytkownika jest stosunkowo proste. Zaangażowanie jQuery nie przynosi korzyści, ponieważ nie potrzebujesz niczego poza obiektami window
i 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;
}
Jeśli interesuje Cię implementacja, która będzie również zajmować się zaznaczeniami <textarea>
i <input>
elementami tekstowymi , możesz użyć następujących. Ponieważ jest teraz 2016, pomijam kod wymagany do obsługi IE <= 8, ale opublikowałem na ten temat wiele rzeczy w 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
Check testuje że wybór jest wybór tekstu, a nie wybór sterowania. W IE zaznaczenie kontrolne to zaznaczenie wewnątrz edytowalnego elementu zawierającego jeden lub więcej elementów (takich jak obrazy i kontrolki formularzy) z konturami i uchwytami zmiany rozmiaru. Jeśli wybierzesz .createRange()
taki wybór, otrzymasz ControlRange
raczej niż a TextRange
i ControlRange
s nie mają żadnej text
właściwości.
selectionStart
lub selectionEnd
w <input>
typie elementu (np. „Liczba”), który nie obsługuje to (patrz na przykład jsfiddle.net/6zoposby/2 ). Zostawiłem sprawdzanie istnienia, selectionStart
aby kod nie złamał się w IE <= 8. Przyznaję, że sprawdzenie activeElement
jest prawdopodobnie teraz nadmierne. Używam, slice
ponieważ jest mocniejszy (choć nie jest to przydatne tutaj) i jest nieco krótszy niż w przypadku pisania substring
.
Uzyskaj wyróżniony tekst w ten sposób:
window.getSelection().toString()
i oczywiście specjalne traktowanie np. dla:
document.selection.createRange().htmlText
document.selection
wsparcie zostało usunięte w IE10 i zastąpione przez window.getSelection
”. Źródło: connect.microsoft.com/IE/feedback/details/795325/…
To rozwiązanie działa, jeśli używasz chrome (nie możesz zweryfikować innych przeglądarek) i jeśli tekst znajduje się w tym samym elemencie DOM:
window.getSelection().anchorNode.textContent.substring(
window.getSelection().extentOffset,
window.getSelection().anchorOffset)
Zastosowanie window.getSelection().toString()
.
Możesz przeczytać więcej na developer.mozilla.org