javascript - 使用 Range.insertNode() 动态添加图像到 DOM

标签 javascript html dom

如何使用 Range.insertNode() 将 IMG 元素动态插入到 DOM 中?

我的 HTML:

<div class="css_class_for_div" style="height: 250px;" contenteditable="true">
    <img src="/path/to/my/image/myimage.png" alt="/myimage.png" title="/myimage.png" class="css_class_for_image" e_resid="/myimage.png" />
    <br />
    <br />
    <span class="css_class_for_span"></span>
</div>
<input id="myButton" type="button" value="insert image" />

我的JS:

var button = document.getElementById("myButton");
button.addEventListener("click", function(e){
    var src = "/path/to/my/other/image/image2.png";
    var title = "/image2.png";
    var cssClassname = "css_class_for_image";
    var list = document.getElementsByClassName("css_class_for_div");
    var el = list[0];
    var selRanges = el.getSelection();
    if (selRanges.rangeCount > 0) {
        var curRange = selRanges.getRangeAt(0); // Range object
        if (curRange.toString().length == 0) {
            var imageNode = document.createElement('img');
            imageNode.src = src;
            imageNode.alt = title;
            imageNode.title = title;
            imageNode.className = cssClassname;
            curRange.insertNode(imageNode);
        }
    }
},false);

[Link to fiddle]

上面的代码不起作用。如有任何帮助,我们将不胜感激。

最佳答案

如果您只想将 Image2 插入到 classname = css_class_for_div 的第一个出现的 div 中,使用 Range.InsertNode() ,您可以使用以下代码。

我必须使用

var range = document.createRange();
range.selectNode(your div);
range.insertNode(your image);

Updated Fiddle

var button = document.getElementById("myButton");
button.addEventListener("click", function (e) {
    debugger;
    var range = document.createRange();
    var list = document.getElementsByClassName("css_class_for_div");
    if (list.length > 0) {
        var el = list[0];
        range.selectNode(el);
        var imageNode = getImageNode();
        range.insertNode(imageNode);
    }
}, false);

function getImageNode() {
    var src = "/path/to/my/other/image/image2.png";
    var title = "/image2.png";
    var cssClassname = "css_class_for_image";
    var imageNode = document.createElement('img');
    imageNode.src = src;
    imageNode.alt = title;
    imageNode.title = title;
    imageNode.className = cssClassname;
    return imageNode;
}

关于javascript - 使用 Range.insertNode() 动态添加图像到 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30645641/

相关文章:

javascript - 无法在局部 View 中使用部分的干净替代方案?

html - 如何创建一个看起来像计时器的圆形进度条?

javascript - 将对象绑定(bind)到元素的正确位置

javascript - 展开导航强制滚动到打开时的顶部

javascript - react Hook : Invalid hook call while using useQuery

php - 发布表单时,是否在 URL 中保留了 GET 变量?

jquery - 为什么我不能用 JQuery .html 添加 <br/>?

javascript - document.head 诉 document.getElementsByTagName ("head")[0]

javascript - 从 jQuery 事件访问函数中的参数 * 和 * 事件

html - 在内网强制 "Internet Explorer 8"浏览器模式