【问题标题】:Wordpress: add events inside TinyMCE iframeWordpress:在 TinyMCE iframe 中添加事件
【发布时间】:2012-07-15 16:05:25
【问题描述】:

我在 Wordpress 中添加了一些 div 包装样式,但是当我在页面中使用它们时,无法在页面中在它们下方添加内容。 CSS:after 在 div 内部创建可选区域,但在 div 之后创建可选区域不起作用。

在我的functions.php中我有:

  function my_mce_before_init( $settings ) {
    $style_formats = array(
        array(
            'title' => 'Box Two Columns',
            'block' => 'div',
            'classes' => 'twocolbox',
            'wrapper' => true
        ),
        array(
            'title' => 'Image with Caption',
            'block' => 'div',
            'classes' => 'img_caption',
            'wrapper' => true
        ),
        array(
            'title' => 'Gallery Horizontal',
            'block' => 'div',
            'classes' => 'scroller horizontal',
            'wrapper' => true
        )
    );

    $settings['style_formats'] = json_encode( $style_formats );
    return $settings;

}
add_filter('tiny_mce_before_init', 'my_mce_before_init');
add_editor_style();

有没有办法在这里使用 execCommand 在我定义的 div 样式之后添加一些 html?之后添加类似空段落标签的内容并带有明确的浮动?

我试过了:

tinyMCE.execCommand('mceInsertContent',false,'Hello world!!');" 

然后 MCE 编辑器中断。

... 试过这个,但它太错误了: 在 editor-styles.css 中:

#tinyMCE:after {
 content: "    ";
 clear:both;
 width: 4em; height:4em;
}

请注意,您可能需要清除缓存和 shift-reload 按钮才能查看 Wordpress 中 editor-styles.css 的任何更改。

...

仍在努力。找到一个线程: To access tinymce iframe elements through jquery

我尝试将此线程中的代码添加到 my_mce_before_init,但它只是坏了。

.... 还尝试加载 jQuery 脚本,但目标路径在 TinyMCE iframe 上不起作用。这些选择器都不起作用:

jQuery(document).ready(function($) {

    $("#tinyMCE").find("div").after('<p style="width:100%; clear:both; height:1em;">&nbsp; 6789</p>');
     $("div").css("color","red");

    $("#content_ifr").contents().find("div").after('<p style="width:100%; clear:both; height:1em;">&nbsp; 6789</p>');
    $("#content_ifr").contents().find("#tinymce p").css("color","red");

    $("#wp-content-editor-container").find("textarea").css("color","red");
    $("iframe").contents().find("p").css("color","red");

    $('#content_ifr').load(function(){
        $('#content_ifr').contents().find('p').css("color","red");
    });
 });

【问题讨论】:

    标签: php jquery wordpress tinymce wordpress-theming


    【解决方案1】:

    您可以使用 tinymce 配置选项 content_css 添加 html 伪元素。 在那里你可以定义 after 元素。试试看!

    更新:

    初始化tinymce时,设置参数如下(tinyMCE.init({...}内)

    ...
    theme: "advanced",   // example param
    setup : function(ed) {
        ed.onInit.add(function(ed, evt) {
            $("#content_ifr").contents().find("p").css("color","red");
    
            // other approach  
            //$(ed.getBody()).find('p').css("color","red");
        });
    },
    cleanup: true,      // example param
    ...
    

    【讨论】:

    • 嗨 Thariama,css:after 在 MCE 中创建可选区域时遇到了很多问题。如果我知道如何将 setContent 放入 functions.php 或如何让我的 jquery 以 MCE iframe 为目标,那么 setContent 可能会起作用。
    • 当 ed 是 tinymce 编辑器对象时,您可以使用 $("#" + ed.id + "_ifr") 定位编辑器 iframe
    • 我尝试加载一个 Jquery 脚本并使用: $('#content_ifr').contents().find('p').css("color","re​​d");也许如果我更改为文档加载事件?你是说目标不是问题,所以一定是加载顺序?
    • jQuery(document).ready(function($) 将不起作用,因为在那个时间点仍然没有准备好编辑器实例(并且没有创建 iframe)。要使其工作,您应该使用一个 onInitHandler 加上 tinymce 配置参数设置(将您的代码放在该处理程序中!)
    • 这是我不明白的部分 - 如何以及在何处放置 onInitHandler。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    相关资源
    最近更新 更多