Tôi có một div có thể chỉnh sửa được mà tôi muốn có thể đưa người dùng chèn những thứ như liên kết, hình ảnh hoặc video trên YouTube. Tại thời điểm này đây là những gì tôi có:Nhận và đặt vị trí con trỏ với div có thể chỉnh sửa nội dung
function addLink() {
var link = $('#url').val();
$('#editor').focus();
document.execCommand('createLink', false, link);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Text Editor -->
<div id="editor" contenteditable="true"></div>
<!-- Add Link -->
<input type="text" id="url">
<button onclick="addLink()">Submit</button>
Như bạn có thể thấy, người dùng phải gõ vào một hộp văn bản riêng biệt để nhập địa chỉ liên kết. Do đó, khi liên kết được thêm vào trình chỉnh sửa, nó sẽ không được thêm vào vị trí mà con trỏ/dấu nháy đã được bật.
Câu hỏi của tôi là cách tôi có thể nhận và đặt vị trí của con trỏ/dấu mũ. Tôi đã thấy các câu hỏi khác như this for setting the pointer tuy nhiên tôi muốn có một giải pháp được hỗ trợ trong tất cả các trình duyệt hiện đại, bao gồm Chrome, Safari, Firefox và IE9 +.
Bất kỳ ý tưởng nào? Cảm ơn.
Edit:
tôi thấy đoạn code dưới đây mà được vị trí tuy nhiên, nó chỉ được vị trí theo dòng đó là ngày. Ví dụ nếu tôi có điều này (nơi |
là con trỏ):
This is some text
And som|e more text
Sau đó, tôi sẽ được trả lại giá trị 7, không 24.
function getPosition() {
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt) {
return sel.getRangeAt(0).startOffset;
}
}
return null;
}
Giải pháp bạn liên kết không có giải pháp hoạt động trên tất cả các trình duyệt, chỉ cần đọc vượt quá giải pháp được chấp nhận. Để nhận vị trí con trỏ, hãy thử cách này: http://stackoverflow.com/questions/4767848/get-caret-cursor-position-in-contenteditable-area-containing-html-content – SunKnight0
@ SunKnight0 Tôi đã thử đoạn mã sau từ giải pháp bạn cung cấp tuy nhiên nó trả về như mọi khi 0.'var editor = document.getElementById ('# editor'); ' ' console.log (getCaretCharacterOffsetWithin (editor)); 'Tôi đã sử dụng hàm từ câu trả lời http: // stackoverflow này .com/questions/4811822/get-a-range-start-and-end-offsets-relative-to-its-parent-container/4812022 # 4812022 –
Sử dụng 'getElementById ('editor')'. Bạn đang trộn vani JavaScript với JQuery. – SunKnight0