Tôi có div contentedittable nàylàm thế nào để có được vị trí dấu nháy của một div contenteditable trong đó có hình ảnh
<div contenteditable="true" id="text">minubyv<img src="images/smiley/Emoji Smiley-01.png" class="emojiText" />iubyvt</div>
Dưới đây là một mô tả hình ảnh của đầu ra mã
vì vậy tôi muốn nhận được caret vị trí của div và giả định rằng con trỏ là sau ký tự cuối cùng. Và đây là mã của tôi để nhận được vị trí trên xe hơi
function getCaretPosition(editableDiv) {
var caretPos = 0,
sel, range;
if (window.getSelection) {
sel = window.getSelection();
if (sel.rangeCount) {
range = sel.getRangeAt(0);
if (range.commonAncestorContainer.parentNode == editableDiv) {
caretPos = range.endOffset;
}
}
} else if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
if (range.parentElement() == editableDiv) {
var tempEl = document.createElement("span");
editableDiv.insertBefore(tempEl, editableDiv.firstChild);
var tempRange = range.duplicate();
tempRange.moveToElementText(tempEl);
tempRange.setEndPoint("EndToEnd", range);
caretPos = tempRange.text.length;
}
}
return caretPos;
}
var update = function() {
console.log(getCaretPosition(this));
};
$('#text').on("mousedown mouseup keydown keyup", update);
Nhưng vấn đề là nó trả về 6
thay vì 14
. Vị trí dấu mũ quay trở lại 0
sau hình ảnh. Xin vui lòng là có một cách tôi có thể có được vị trí caret là 14
trong trường hợp này.
EDIT
Tôi muốn cũng để chèn một số yếu tố bắt đầu từ vị trí dấu nháy. vì vậy đây là chức năng của tôi để làm điều đó
selectStart = 0;
var update = function() {
selectStart = getCaretPosition(this);
};
function insertEmoji(svg){
input = $('div#text').html();
beforeCursor = input.substring(0, selectStart);
afterCursor = input.substring(selectStart, input.length);
emoji = '<img src="images/smiley/'+svg+'.png" class="emojiText" />';
$('div#text').html(beforeCursor+emoji+afterCursor);
}
Mã của bạn là mát mẻ nhưng tôi cần phải phát hiện tất cả html nội dung của div không onle văn bản, bởi vì tôi sẽ chèn một số ký tự vào div tại vị trí caret. Nhìn vào câu hỏi của tôi chỉnh sửa. –
@doggiebrezy Tôi đã làm cho nó hoạt động như bạn muốn. Xem câu trả lời cập nhật của tôi. Tôi đã thử nghiệm nó trên Chrome và Firefox mới nhất. Nó không hoạt động trên IE mặc dù. –
cảm ơn bạn đã chỉnh sửa nhưng hãy giúp tôi với một điều cuối cùng. Bây giờ tôi muốn chèn một số văn bản hoặc hình ảnh ở vị trí dấu mũ và vì vậy tôi chia div.html nhưng vấn đề là giả sử vị trí dấu mũ là 11, văn bản được chèn không tính hình ảnh đó là một nhưng toàn bộ img.html ở đó bằng cách đặt sai điểm mà tại đó nó được chèn vào, xin bạn có thể giúp tôi đếm số chuỗi trong div.html bao gồm phần tử img –