I need to manipulate img element before inserting it into a contenteditable div.
here next is my attempt. to do ..
- add
EditorImgsclass to the image assign - add
srcto that image
window.addEventListener('load', function () {
var ImgCmd = document.getElementById('ImgCmd');
var uploader = document.getElementById('ImageUploader');
ImgCmd.addEventListener('click', () => uploader.click());
});
var editer = document.getElementById('design_view');
function uploadFile(e) {
let file = e.target.files[0];
editer.focus();
let url = URL.createObjectURL(file);
// console.log(url); // blob:https://localhost:34564/1v9m120z-y982-4np3-a8ah-9uead3dj6743
var Img = document.createElement('img');
Img.src = url;
Img.setAttribute("class", "EditorImgs");
document.execCommand('insertImage', false, Img);
}.EditorImgs
{
border: 1px solid #d3d3d3;
overflow: hidden;
resize: both;
width: 200px;
height: 150px;
}<input id="ImageUploader" type="file" hidden="hidden" onchange="uploadFile(event)" /> <button id="ImgCmd">Insert Image</button> <div contenteditable id="design_view"></div>
Advertisement
Answer
When using document.execCommand('insertImage'), the third argument should be the URL, not an image element.
document.execCommand('insertImage', false, url);
If you want to style the image, you could use document.execCommand('insertHTML') or Range#insertNode.
var range = window.getSelection().getRangeAt(0); range.insertNode(Img);
window.addEventListener('load', function () {
var ImgCmd = document.getElementById('ImgCmd');
var uploader = document.getElementById('ImageUploader');
ImgCmd.addEventListener('click', () => uploader.click());
});
var editer = document.getElementById('design_view');
function uploadFile(e) {
let file = e.target.files[0];
editer.focus();
let url = URL.createObjectURL(file);
var Img = document.createElement('img');
Img.src = url;
Img.setAttribute("class", "EditorImgs");
var range = window.getSelection().getRangeAt(0);
range.insertNode(Img);
}.EditorImgs
{
border: 1px solid #d3d3d3;
overflow: hidden;
resize: both;
width: 200px;
height: 150px;
}<input id="ImageUploader" type="file" hidden="hidden" onchange="uploadFile(event)" /> <button id="ImgCmd">Insert Image</button> <div contenteditable id="design_view"></div>