javascript - 图像上的 contenteditable removeFormat

标签 javascript html contenteditable

我正在尝试将一个 contenteditable DIV 与作为表单一部分的文本区域同步。

我正在从 DIV 中提取 innerHTML,但我希望能够从 img 标签(粗体、斜体、下划线等)中删除嵌套格式。在访问 div 的 innerHTML 之前删除图像上的任何格式可能比在 html 上使用正则表达式更容易。

我可以使用:

    document.execCommand('removeFormat', false, null); 

但是我怎样才能只删除图像上的格式?

(我还需要在图像上使用 ALT 标签,使用 execCommand/insertImage 似乎不可能完成。这是正确的吗?我最终遵循了建议Contenteditable text editor and cursor position 并且正在使用 insertHTML)

非常感谢!

最佳答案

按照@tim-down 的建议,我尝试导航 DOM 并从 IMG 标签中删除文本格式。

奖金将颁发给更优雅的解决方案。

这里的工作示例:http://jsfiddle.net/tjzGg/

function setCaret() {
    var el = document.getElementById("editable");
    recurseDOM(el);
    el.focus();
}

function recurseDOM(el) {
    var nIndex = 0;
    var elNode = el.childNodes[nIndex];
    while (elNode) {
        var tag = elNode.tagName;
        if (tag) {
            if (tag.toUpperCase() == 'IMG') {
                var range = document.createRange();
                var sel = window.getSelection();
                range.selectNode(elNode);
                sel.removeAllRanges();
                sel.addRange(range);
                document.execCommand('removeFormat', false, null);
            } else if (elNode.childElementCount) {
                recurseDOM(elNode);
            }
        }
        nIndex++;
        elNode = el.childNodes[nIndex];
    }
}

关于javascript - 图像上的 contenteditable removeFormat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16198925/

相关文章:

javascript - 当 parent 溢出时触发 child 溢出

javascript - 如何以编程方式打开 d3 元素的 ngbootstrap 弹出窗口?

javascript - 如何在 twitter-bootstrap 流体布局中创建多个可滚动部分

c# - 如何在 javascript 中访问 session 对象成员变量后面的 asp.net 代码?

javascript - Google Drive & vuejs3 - 将文件上传到特定文件夹

javascript - Jquery 插件 slider 功能未显示在摘要中

html - 有没有基于 bootstrap 的可视化网页编辑器?

javascript - 内容内的颜色编码可编辑吗?

AngularJS:限制自定义 contenteditable 指令中的用户输入

javascript - 如何删除具有 contentEditable 和大小样式的 div 的调整大小句柄和边框