#javascript #html #dom
#javascript #HTML #dom
Вопрос:
Мне нужно вставить изображение с помощью insertHtml execCommand внутри редактируемого содержимого div. Проверьте приведенный ниже код.
function createRange(node, chars, range) {
if (!range) {
range = document.createRange()
range.selectNode(node);
range.setStart(node, 0);
}
if (chars.count === 0) {
range.setEnd(node, chars.count);
} else if (node amp;amp; chars.count >0) {
if (node.nodeType === Node.TEXT_NODE) {
if (node.textContent.length < chars.count) {
chars.count -= node.textContent.length;
} else {
range.setEnd(node, chars.count);
chars.count = 0;
}
} else {
for (var lp = 0; lp < node.childNodes.length; lp ) {
range = createRange(node.childNodes[lp], chars, range);
if (chars.count === 0) {
break;
}
}
}
}
return range;
}
function setCurrentCursorPosition(chars) {
if (chars >= 0) {
var selection = window.getSelection();
range = createRange(document.getElementsByTagName('div')[0].parentNode, { count: chars });
if (range) {
range.collapse(false);
selection.removeAllRanges();
selection.addRange(range);
}
document.execCommand('inserthtml', false, '<br><img id="img1" alt="" src="https://assets.justinmind.com/wp-content/uploads/2019/04/wireframe-examples-web-and-mobile-header.png" style="width:100%;"><br>');
}
}
<div contenteditable="true">item 1<br>item 2<br><br>item 3<br>item 4<br>item 5<br>...</div>
<button id="addImage" type="button" onclick="setCurrentCursorPosition(24)">Add Image</button>
Как вы можете видеть, изображение вставляется не в том месте. Это пример, но давайте предположим, что пользователь установит курсор в позицию 24, а затем добавит изображение. Изображение должно быть вставлено после части «item 4», но перед этим вставляются символы, что означает, что он рассматривает html-часть, а не только текст, и помещает изображение в неправильную часть. Почему? Что я делаю не так?
Ответ №1:
Он считает возвраты каретки в виде символов. Если вы измените положение курсора на 29, он попадет точно в нужное место.
Если вы хотите увидеть это в действии, просто запустите фрагмент кода, поместите курсор перед пунктом 1, затем нажмите клавишу со стрелкой вправо 29 раз, и вы окажетесь сразу после пункта 4
Комментарии:
1. привет.. Я знаю, что мог бы изменить позицию, но я предполагаю, что пользователь установит позицию курсора после «элемента 4», а затем добавит изображение.. это не добавляет изображение в нужное место..
2. Я скопировал ваш код во внешний HTML-файл, и он работает так, как задумано. Даже несмотря на то, что опубликованный вами фрагмент кода не работает. Очень странно.