TinyMCE中的forced_root_block选项

时间:2012-06-14 16:36:29

标签: tinymce contenteditable

我正在尝试使用contenteditable <div>实现自定义WYSIWYG编辑器。

我面临的一个主要问题是浏览器处理 ENTER 击键(换行符)的方式不一致。 Chrome插入<div>,Firefox插入<br>,IE插入<p>。我正在看看TinyMCE,它有一个名为forced_root_block的配置选项。将forced_root_block设置为div实际上适用于所有主要浏览器。有人知道TinyMCE中的forced_root_block选项如何能够跨浏览器实现它吗?

1 个答案:

答案 0 :(得分:2)

在tinymce来源(/tiny_mce/classs/dom/DomParser.js)中,您会找到以下内容:

rootBlockName = "forced_root_block" in args ? args.forced_root_block : settings.forced_root_block;

        whiteSpaceElements = schema.getWhiteSpaceElements();
        startWhiteSpaceRegExp = /^[ \t\r\n]+/;
        endWhiteSpaceRegExp = /[ \t\r\n]+$/;
        allWhiteSpaceRegExp = /[ \t\r\n]+/g;

        function addRootBlocks() {
            var node = rootNode.firstChild, next, rootBlockNode;

            while (node) {
                next = node.next;

                if (node.type == 3 || (node.type == 1 && node.name !== 'p' && !blockElements[node.name] && !node.attr('data-mce-type'))) {
                    if (!rootBlockNode) {
                        // Create a new root block element
                        rootBlockNode = createNode(rootBlockName, 1);
                        rootNode.insert(rootBlockNode, node);
                        rootBlockNode.append(node);
                    } else
                        rootBlockNode.append(node);
                } else {
                    rootBlockNode = null;
                }

                node = next;
            };
        };

这显然需要创建根块元素。 我99%确定tinymce处理'ENTER'键击本身并停止传播/默认浏览器命令。