2012-06-14 19 views
5

我正在嘗試使用contenteditable<div>來實現定製的所見即所得編輯器。TinyMCE中的forced_root_block選項

我面臨的一個主要問題是瀏覽器處理方式不一致ENTER keystroke(linebreaks)。 Chrome插入<div>,Firefox插入<br>和IE插入<p>。我正在看TinyMCE,它有一個名爲forced_root_block的配置選項。將forced_root_block設置爲div實際適用於所有主流瀏覽器。有人知道TinyMCE中的forced_root_block選項如何能夠跨瀏覽器實現它嗎?

+0

+1好問題 – Thariama

回答

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」按鍵本身並停止傳播/默認瀏覽器命令。

+0

是的,你是對的。我深入瞭解了tinymce源代碼。他們有一個名爲「EnterKey.js」的類。這個類的主要功能是'handleEnterKey'。 Tinymce陷阱 – Amrit

+0

感謝您的確認,這就是我的想法 – Thariama