2

我正在尝试将 contenteditable DIV 与作为表单一部分的 textarea 同步。

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

我可以使用:

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

但是我怎么可能只删除图像上的格式?

(另外我需要在图像上使用 ALT 标签,似乎不可能用execCommand/来完成insertImage。这是正确的吗?我最终遵循了关于Contenteditable 文本编辑器和光标位置的建议并正在使用insertHTML

非常感谢!

4

1 回答 1

1

遵循@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];
    }
}
于 2013-04-25T20:55:14.860 回答