TinyMCE初始化后用javascript设置textarea值

Posted

技术标签:

【中文标题】TinyMCE初始化后用javascript设置textarea值【英文标题】:Set textarea value with javascript after TinyMCE initializing 【发布时间】:2012-08-01 08:43:05 【问题描述】:

我有一个 textarea,我在该 textarea 上使用 tinyMCE。

我实际上是在打开页面时,在 textarea 中填充一些文本,然后初始化 tinyMCE。

问题是当我尝试在 tinyMCE 初始化后更改 textarea 的值时,什么也没有发生。

这是一个例子。

    创建文本区域:

    <textarea style="width: 95%;" name="title"  id="title"></textarea>
    

    填充文本区域:

    $('#title').html("someText");
    

    初始化 tinyMCE

    tinyMCE.init(
            // General options
            mode : "specific_textareas",
            theme : "advanced",
            width: "100%",
            plugins : "pagebreak,paste,fullscreen,visualchars",
    
            // Theme options
            theme_advanced_buttons1 : "code,|,bold,italic,underline,|,sub,sup,|,charmap,|,fullscreen,|,bullist,numlist,|,pasteword",
            theme_advanced_buttons2 :"",
            theme_advanced_buttons3 :"",
            theme_advanced_buttons4 :"",
            theme_advanced_toolbar_location : "top",
            theme_advanced_toolbar_align : "left",
            theme_advanced_statusbar_location : "bottom",
            valid_elements : "i,sub,sup",
            invalid_elements : "p, script",
            editor_deselector : "mceOthers"
        );
    

    我想更改 textview 的内容(但不起作用)

我尝试使用与之前相同的方式来初始化 tinyMCE

    $('#title').html("someModifiedText"); // does not work

我也试过删除 tinyMCE:

    if(tinyMCE.getInstanceById('title'))
    removeTinyMCE("title");

function removeTinyMCE (dialogName) 
    tinyMCE.execCommand('mceFocus', false, dialogName);
    tinyMCE.execCommand('mceRemoveControl', false, dialogName);

然后再使用:

    $('#title').html("someModifiedText"); // does not work

我没有想法...非常感谢您的帮助....

【问题讨论】:

【参考方案1】:

这里的问题是,如果您在 textarea 中输入文本或 html,您将看不到任何内容。 当 tinymce 初始化时,您的 textarea 会被隐藏。然后您看到的是一个内容可编辑的 iframe,用于编辑和设置内容样式。有几个事件会导致 tinymce 将其内容写入编辑器的 html 源元素(在您的情况下是您的 textarea)。

如果您想设置编辑器的内容(可见),您需要调用类似

tinymce.get('title').setContent('<p>This is my new content!</p>');

您也可以直接使用以下方式访问 dom 元素

tinymce.get('title').getBody().innerHTML = '<p>This is my new content!</p>';

或使用 jQuery

$(tinymce.get('title').getBody()).html('<p>This is my new content!</p>');

【讨论】:

再次感谢 Thariama,我在这里遇到错误:tinymce.get('title') is undefined 参考this。 @goldenparrot,谢谢,我已经尝试过了,但仍然是同样的问题。 您需要使用您的 textareas id,但您也可以使用 tinymce.activeEditor 或 tinymce.editors[0] setcontent 对我不起作用,但 setContent 可以(大写“C”)【参考方案2】:

您可以使用tinyMCE.activeEditor.setContent('&lt;span&gt;some&lt;/span&gt; html');

Check this Answer

【讨论】:

如果你觉得这个问题是重复的,它应该被标记为这样。请不要发布指向其他 Stack Overflow 问题的链接作为答案。 抱歉没有注意到同一用户的帖子。谢谢你的信息。 很好的解决方案!! 这个答案应该是公认的答案。简单的好解决方案!谢谢@RyanMonreal【参考方案3】:

这对我有用

$("#description").val(content);

【讨论】:

【参考方案4】:
<textarea id="content" name="content">html_entity_decode($yourstringdata)</textarea>

这对我有用,解码您的 html 数据并将其放在开始和结束 textarea 标记之间。

【讨论】:

【参考方案5】:

我通过确保在文档准备好后完成setContent 解决了同样的问题,所以首先;

script(type="text/javascript").
  tinymce.init(
    selector: '#title',
    height: 350,
    menubar: false
  );

然后

script(type='text/javascript').
  $(document).ready(function()
    tinymce.get('title').setContent('<span>someText</span> is html');
  )

上面是 pug 的代码,但关键是 - 如前所述 - 将其加载到准备好的文档中。

【讨论】:

【参考方案6】:

调用一次

tinymce.triggerSave();

然后tinymce 的值将被转移到原来的textarea 值。因此,您可以从普通的 textarea 获得它。

【讨论】:

【参考方案7】:

它对我有用。只需将其放在您的 html 代码中,而不是使用 tinymce

    <textarea> html CONTENT</textarea>

【讨论】:

问题是关于以特定方式使用 tinyMCE,但这里提供的解决方案只是说,不要使用 tinymce,这根本无助于回答问题。

以上是关于TinyMCE初始化后用javascript设置textarea值的主要内容,如果未能解决你的问题,请参考以下文章

初始化所有 tinyMCE 编辑器后如何设置回调执行?

Tinymce富文本设置行高

tinymce插入代码快空行

在 WordPress 插件中调用 TinyMCE

TinyMCE 的removeformat插件会给数字和字母会自动添加<span lang="EN-US"></span>,如何设置不会添加?

javascript WordPress:创建TinyMCE自定义按钮