可編輯的div不是處理輸入的理想類型。類似的遊標行爲在可編輯div的值正在使用JS或jQuery進行顯式更新時很常見。要解決此問題,您需要使用合適的默認輸入類型,如<input>
和<textarea>
標籤。
而這並不能解決您的使用案例,因爲您無法更改所選文本的屬性。因此,解決辦法是作爲客戶端如下:
- 創建一個全局變量來存儲遊標的更新值對每個這樣的編輯股利。
- 在每個onblur事件中更新此全局變量的值。
- 在突出顯示關鍵字之前檢索此全局值。
- 進行必要的關鍵字高亮後,將光標更新爲檢索的值。
以下是函數來檢索和更新光標值:
function doGetCaretPosition (id, storeTo) {
var oField = document.getElementById(id);
// Initialize
var iCaretPos = -1;
// IE Support
if (document.selection) {
// Set focus on the element
oField.focus();
// To get cursor position, get empty selection range
var oSel = document.selection.createRange();
// Move selection start to 0 position
oSel.moveStart('character', -oField.value.length);
// The caret position is selection length
iCaretPos = oSel.text.length;
}
// Firefox support
else if (oField.selectionStart || oField.selectionStart == '0')
iCaretPos = oField.selectionStart;
// Return results
if(window[storeTo] !== undefined || window[storeTo] !== '')
{
//if position is not updated
if($(oField).val().length == iCaretPos)
window[storeTo] = -1;
else
window[storeTo] = iCaretPos;
console.log("[doGetCaretPosition Updated] "+$(oField).attr('id')+" in : "+window[storeTo]);
}
else
console.log("[doGetCaretPosition : failed]");
}
//Set caret position
function setCaretPosition(elemId, caretPos) {
var elem = document.getElementById(elemId);
if(elem != null) {
if(elem.createTextRange) {
var range = elem.createTextRange();
range.move('character', window[caretPos]);
range.select();
}
else {
if(elem.selectionStart) {
elem.focus();
elem.setSelectionRange(window[caretPos], window[caretPos]);
}
else
elem.focus();
}
}
console.log("[setCaretPosition Updated]");
}
是的,如果你有一個更好的代碼,這將有助於我很多 – EstevaoLuis