2012-01-03 211 views
2

我试图在稍后将被动态替换的html代码中插入一个占位符。到目前为止,我设法插入代码,TinyMCE识别标签,但是当我尝试向其添加id属性时,该属性因未知原因被删除。我尝试了大部分附加选项,但似乎没有任何效果。TinyMCE从自定义标记中删除属性

当前配置:

extended_valid_elements : "module[id]", 
valid_children : "module[img]", 
custom_elements : "module", 

创建按钮(随后插入代码)代码:

setup : function(ed) { 
    // Add a custom button 
    ed.addButton("module", { 
     title : "Module", 
     image : "images/app-x-php-icon.png", 
     onclick : function() { 
      ed.focus(); 
      var options = document.getElementById('rendermcemods').innerHTML+""; 
      var optionList = options.split('|'); 
      var name=prompt("Please enter module name out of: "+options,optionList[0]); 
      for(var i=0;i<optionList.length;i++){ 
       if(optionList[i] == name){ 
        var patt=new RegExp('<module id="'+name+'">.*</module>','ig'); 
        var content = '<module id="'+name+'"><img src="images/app-x-php-icon.png" /></module>'; 
        //alert(content); 
        if(! patt.test(ed.getContent())){ 
         ed.execCommand('mceInsertContent', false,content); 
        }        
       } 
      }            
     } 
    });     
} 

正如你可能会注意到,有插入之前的警报,这在我以前验证内容是否正确... 当使用按钮来插入代码,然后查看HTML,这是我得到:

<module><img src=images/app-x-php-icon.png" alt="" /></module> 

有谁知道如何解决这个问题?

更新:

为TinyMCE的全配置设置:

// General options 
     mode : "none", 
     theme : "advanced", 
     plugins : "autolink,lists,spellchecker,pagebreak,style,layer,table,\n\ 
        save,advhr,advimage,advlink,emotions,iespell,inlinepopups,\n\ 
        insertdatetime,media,searchreplace,print,contextmenu,paste,\n\ 
        directionality,fullscreen,noneditable,visualchars,\n\ 
        nonbreaking,xhtmlxtras", 

     // Theme options 
     theme_advanced_buttons1 : "fullscreen,help,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect,|,module", 
     theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,code,|,insertdate,inserttime,|,forecolor,backcolor", 
     theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,ltr,rtl,|,spellchecker,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,blockquote,|,insertfile,insertimage", 
     theme_advanced_toolbar_location : "top", 
     theme_advanced_toolbar_align : "left", 
     theme_advanced_statusbar_location : "bottom", 
     theme_advanced_resizing : true, 

     // Skin options 
     skin : "o2k7", 
     skin_variant : "silver", 

     document_base_url : "http://www.example.com", 
     content_css : "content.css", 
     extended_valid_elements : "module[id]", 
     valid_children : "module[img]", 
     /*custom_elements : "module", */   

     // Drop lists for link/image/media/template dialogs    
     external_link_list_url : "js/generateList.php?A=link", 
     external_image_list_url : "js/generateList.php?A=image", 
     media_external_list_url : "js/generateList.php?A=media", 

     setup : function(ed) { 
      // Add a custom button 
      ed.addButton("module", { 
       title : "Module", 
       image : "images/app-x-php-icon.png", 
       onclick : function() { 
        ed.focus(); 
        var options = document.getElementById('rendermcemods').innerHTML+""; 
        var optionList = options.split('|'); 
        var name=prompt("Please enter module name out of: "+options,optionList[0]); 
        for(var i=0;i<optionList.length;i++){ 
         if(optionList[i] == name){ 
          var patt=new RegExp('<module id="'+name+'">.*</module>','ig'); 
          var content = '<module id="'+name+'"><img src="images/app-x-php-icon.png" /></module>'; 
          //alert(content); 
          if(! patt.test(ed.getContent())){ 
           ed.execCommand('mceInsertContent', false,content); 
          }        
         } 
        }            
       } 
      });     
     } 

另一个更新:这可能是有趣的(希望能帮助解决),要知道,id属性不会被删除时,TinyMCE的是加载并且它已经在那里,并且具有该属性的现有代码的清理也不会将其移除。

+0

这应该工作(我也做了本地测试)。尝试不使用'custom_elements'行。你可以发布整个配置吗? – 2012-01-03 14:58:56

+0

@Madmartigan当不使用cutom_elements行代码被替换为:'

' – canihavesomecoffee 2012-01-03 15:15:19

+0

好的,那么请发布您的整个配置和你使用的是什么版本的TinyMCE。如果你能给我们一种重现问题的方法,它可以更容易地解决;正如我所说,这对我来说已经很好。 – 2012-01-03 15:17:42

回答

0

我最终使用的解决方案是修改blockElementsMap和过渡地图taht在源代码中。这似乎是将自定义标签识别为“blocklevel”元素的唯一方法,并且可以将其添加到代码中,以便以后处理。

1

我会把module改为valid_elements而不是extended_valid_elements/custom_elementsextended_valid_elements有时会表现奇怪。 (你需要放大你自己的valid_elementsvalid_children设置(如果你的定制tinymce配置中没有使用,你将不得不使用默认设置(可以在moxiecode网站上找到))) :

// The valid_elements option defines which elements will remain in the edited text when the editor saves. 
valid_elements: "@[id|class|title|style|onmouseover]," + 
"module," + 
"a[name|href|target|title|alt]," + 
"#p,blockquote,-ol,-ul,-li,br,img[src|height|width],-sub,-sup,-b,-i,-u," + 
"-span[data-mce-type],hr", 

valid_children: "body[p|ol|ul|hr]" + 
"module[img]" + 
",p[a|span|b|i|u|sup|sub|img|hr|#text|blockquote]" + 
",span[a|b|i|u|sup|sub|img|#text|blockquote]" + 
",a[span|b|i|u|sup|sub|img|#text|blockquote]" + 
",b[span|a|i|u|sup|sub|img|#text|blockquote]" + 
",i[span|a|b|u|sup|sub|img|#text|blockquote]" + 
",sup[span|a|i|b|u|sub|img|#text]" + 
",sub[span|a|i|b|u|sup|img|#text]" + 
",li[span|a|b|i|u|sup|sub|img|ol|ul|#text]" + 
",ol[li]" + 
",ul[li]", 
+0

会测试一下。我只是想通过在'content'中添加一个简单的' '来解决消失的id,但是你的解决方案应该更加稳定和整洁。 – canihavesomecoffee 2012-01-04 11:04:37