5

を使用してカスタム WYSIWYG エディターを実装しようとしていcontenteditable <div>ます。

私が直面している主な問題の 1 つは、ブラウザーがENTERキーストローク (改行) を処理する方法に一貫性がないことです。Chrome の挿入<div>、Firefox の挿入<br>、IE の挿入<p>。私は TinyMCE を見ていましたが、それには という設定オプションがありますforced_root_block。への設定forced_root_blockは、div実際にはすべての主要なブラウザーで機能します。forced_root_blockTinyMCE のオプションがブラウザ間でどのように実現できるか知っている人はいますか?

4

1 に答える 1

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;
            };
        };

これにより、明らかにルート ブロック要素の作成が処理されます。tinymce が 'ENTER' キーストローク自体を処理し、伝播/デフォルトのブラウザー コマンドを停止することは 99% 確信しています。

于 2012-06-15T06:42:35.817 に答える