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