可编辑的-从插入号到元素末尾提取文本

| 略过所有可能的问题和答案后,我将以这种方式尝试。 我正在对RTE进行编程,但是未能成功地在contenteditable元素中提取文本。 这样做的原因是,每个浏览器以稍微不同的方式处理节点和按键(#13)事件(例如,一个创建\'br \',另一个创建\'div \',\'p \'等) 为了使所有这些保持一致,我正在编写一个跨浏览器的编辑器,该编辑器使用e.preventDefault()杀死所有默认操作。 以下情况: 1)用户按下#13键(选中) 2)检测到插入符位置(检查) 3)在插入符号所在的元素之后(检查)创建新的p(aragraph) 4)如果插入符号和元素末端之间的文本(节点),则将其提取(???) 5)将文本(节点)放入新创建的p(段)(选中) 可以想像,除第4点外,其他所有功能均正常。 众所周知的js rangy库中有类似的功能,其中正在提取特定的选择。 我需要的是:获取并提取所有文本(带有标签,当然是splitBoundaries),从插入号到contenteditable段落(p,h1,h2,...)元素的末尾。 欢迎提供任何线索,提示或摘要! 提前致谢。 亲切的问候, p     
已邀请:
您可以通过创建一个Range对象来实现此目的,该对象包含从插入符到包含的块元素的末尾的内容,并调用其
extractContents()
方法:
function getBlockContainer(node) {
    while (node) {
        // Example block elements below, you may want to add more
        if (node.nodeType == 1 && /^(P|H[1-6]|DIV)$/i.test(node.nodeName)) {
            return node;
        }
        node = node.parentNode;
    }
}

function extractBlockContentsFromCaret() {
    var sel = window.getSelection();
    if (sel.rangeCount) {
        var selRange = sel.getRangeAt(0);
        var blockEl = getBlockContainer(selRange.endContainer);
        if (blockEl) {
            var range = selRange.cloneRange();
            range.selectNodeContents(blockEl);
            range.setStart(selRange.endContainer, selRange.endOffset);
            return range.extractContents();
        }
    }
}
这在IE <= 8中不起作用,该IE不支持Range或与其他浏览器相同的选择对象。您可以使用Rangy(您提到过)来提供IE支持。只需将
window.getSelection()
替换为
rangy.getSelection()
。 jsFiddle:http://jsfiddle.net/LwXvk/3/     

要回复问题请先登录注册