html div 光标位置,ContentEditable div-在更新内部html之后设置光标位置

// some mock logic to identify spelling error

const errorWords = ["helloo", "dudeee"];

// Find words from string like ' Helloo world .. '

// Perhaps you could find a better library you that does this logic.

const getWords = (data) =>{

console.log("Input: ", data);

const allWords = data.split(/\b/);

console.log("Output: ", allWords)

return allWords;

}

// Simple mock logic to identify errors. Now works only for

// two words [ 'helloo', 'dudeee']

const containsSpellingError = word => {

const found = errorWords.indexOf(word) !== -1;

console.log("spell check:", word, found);

return found;

}

const processSpellCheck = text => {

const allWords = getWords(text);

console.log("Words in the string: ", allWords);

const newContent = allWords.map((word, index) => {

var text = word;

if(containsSpellingError(word.toLowerCase())) {

console.log("Error word found", word);

text = $("")

.addClass("spell-error")

.text(word);

}

return text;

});

return newContent;

}

function initalizeSpellcheck(editorRef) {

var editorSize = editorRef.getBoundingClientRect();

var spellcheckContainer = $("

.addClass("spell-check")

.prop("spellcheck", "false");

var spellcheckSpan = $("")

.addClass("spell-check-text-content")

.css({

width: editorSize.width,

height: editorSize.height,

position: "absolute",

zIndex: -1

});

var text = $(editorRef).text();

var newContent = processSpellCheck(text);

spellcheckSpan.append(newContent);

spellcheckContainer.append(spellcheckSpan);

spellcheckContainer.insertBefore(editorRef);

$(editorRef).on("input.spellcheck", function(event) {

var newText = $(event.target).text();

var newContent = processSpellCheck(newText);

$(".spell-check .spell-check-text-content").text("");

$(".spell-check .spell-check-text-content").append(newContent);

});

}

$(document).ready(function() {

var editor = document.querySelector("#editor");

initalizeSpellcheck(editor);

});

#editor {

border: 1px solid black;

height: 200px;

}

.spell-check {

color: transparent;

}

.spell-error {

border-bottom: 3px solid orange;

}

dudeee

可以通过以下代码来设置和获取 contenteditablediv 中的光标位置: ```javascript // 获取光标位置 function getCaretPosition(element) { var caretOffset = 0; var doc = element.ownerDocument || element.document; var win = doc.defaultView || doc.parentWindow; var sel; if (typeof win.getSelection != "undefined") { sel = win.getSelection(); if (sel.rangeCount > 0) { var range = win.getSelection().getRangeAt(0); var preCaretRange = range.cloneRange(); preCaretRange.selectNodeContents(element); preCaretRange.setEnd(range.endContainer, range.endOffset); caretOffset = preCaretRange.toString().length; } } else if ((sel = doc.selection) && sel.type != "Control") { var textRange = sel.createRange(); var preCaretTextRange = doc.body.createTextRange(); preCaretTextRange.moveToElementText(element); preCaretTextRange.setEndPoint("EndToEnd", textRange); caretOffset = preCaretTextRange.text.length; } return caretOffset; } // 设置光标位置 function setCaretPosition(element, pos) { var range, selection; if (document.createRange) { range = document.createRange(); range.setStart(element.childNodes[0], pos); range.collapse(true); selection = window.getSelection(); selection.removeAllRanges(); selection.addRange(range); } else if (document.selection) { range = document.body.createTextRange(); range.moveToElementText(element); range.moveStart("character", pos); range.collapse(true); range.select(); } } ``` 其中,`getCaretPosition()` 函数用于获取光标位置,`setCaretPosition()` 函数用于设置光标位置。需要注意的是,这两个函数都需要传入 contenteditablediv 元素作为参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值