Có thể lấy văn bản được tô sáng trong một đoạn của trang web, ví dụ như bằng cách sử dụng jQuery?
Có thể lấy văn bản được tô sáng trong một đoạn của trang web, ví dụ như bằng cách sử dụng jQuery?
Câu trả lời:
Lấy văn bản người dùng đã chọn là tương đối đơn giản. Không có lợi ích gì khi có được bằng cách liên quan đến jQuery vì bạn không cần gì ngoài các đối tượng window
và 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;
}
Nếu bạn quan tâm đến việc triển khai cũng sẽ xử lý các lựa chọn trong các phần tử <textarea>
texty <input>
, bạn có thể sử dụng các phần sau. Kể từ bây giờ 2016 tôi đang bỏ qua mã cần thiết cho hỗ trợ IE <= 8 nhưng tôi đã đăng nội dung đó ở nhiều nơi trên 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()
). Các document.selection.type
kiểm tra là thử nghiệm mà lựa chọn là một lựa chọn văn bản chứ không phải là một lựa chọn kiểm soát. Trong IE, lựa chọn điều khiển là một lựa chọn bên trong một phần tử có thể chỉnh sửa có chứa một hoặc nhiều phần tử (chẳng hạn như điều khiển hình ảnh và biểu mẫu) với các phác thảo và thay đổi kích thước tay cầm. Nếu bạn gọi .createRange()
một lựa chọn như vậy, bạn nhận được một ControlRange
thay vì a TextRange
và ControlRange
không có text
tài sản.
selectionStart
hoặc selectionEnd
trong một <input>
loại phần tử (chẳng hạn như "số") hỗ trợ nó (xem jsfiddle.net/6zoposby/2 chẳng hạn). Tôi đã để lại kiểm tra cho sự tồn tại của selectionStart
mã để mã sẽ không bị hỏng trong IE <= 8. Tôi thừa nhận rằng kiểm tra activeElement
có lẽ là quá mức cần thiết. Tôi sử dụng slice
vì nó mạnh hơn (mặc dù điều này không hữu ích ở đây) và hơi ngắn để gõ hơn substring
.
Nhận văn bản được tô sáng theo cách này:
window.getSelection().toString()
và tất nhiên là một điều trị đặc biệt cho:
document.selection.createRange().htmlText
document.selection
hỗ trợ đã bị xóa trong IE10 và được thay thế bằng window.getSelection
. Nguồn: connect.microsoft.com/IE/feedback/details/795325/
Giải pháp này hoạt động nếu bạn đang sử dụng chrome (không thể xác minh các trình duyệt khác) và nếu văn bản nằm trong cùng Phần tử DOM:
window.getSelection().anchorNode.textContent.substring(
window.getSelection().extentOffset,
window.getSelection().anchorOffset)
Sử dụng window.getSelection().toString()
.
Bạn có thể đọc thêm trên developer.mozilla.org