2014-05-06 51 views
0

我一直在尝试一段时间,现在找到一种体面的方式来插入和修改使用jQuery的tinyMCE textarea中的文本,但很少成功。人们提供的大多数答案通常仅用于单个tinyMCE textarea,或者通过基于ID调用tinyMCE字段。这一切都很好,但我的项目让我在页面上动态创建重复的字段,这使得难以获得特定的tinyMCE元素。将文本插入到重复的tinyMCE元素中

在我实现tinyMCE之前,我正在调用他们的类与父div关联的重复字段。

例:

 $(this).parents(".main-category").find(".js-description").val(product_data['description_' + $('#language').val()]); 

当我经由保管箱改变产品上面的代码运行。 “$(this)”是dropbox,它然后调用父div,并找到描述textarea,然后它将输入正确的默认数据(从控制器传入)到该字段中。

这里的问题是,当初始化tinyMCE时,原始文本区域几乎全部被掩埋,并且无法用此方法访问。

tinyMCE站点提供了有关如何将文本插入到tinyMCE字段的文档,但这些仅适用于页面上有单个tinyMCE元素或手动插入字段的情况。

// Sets the HTML contents of the activeEditor editor 
    tinyMCE.activeEditor.setContent('<span>some</span> html'); 

    // Sets the raw contents of the activeEditor editor 
    tinyMCE.activeEditor.setContent('<span>some</span> html', {format : 'raw'}); 

    // Sets the content of a specific editor (my_editor in this example) 
    tinyMCE.get('my_editor').setContent(data); 

    // Sets the bbcode contents of the activeEditor editor if the bbcode plugin was added 
    tinyMCE.activeEditor.setContent('[b]some[/b] html', {format : 'bbcode'}); 

有什么办法可以将这些转换成我可以使用的东西吗?还是有其他方法可以用来将信息插入文本区域?

在此先感谢!

回答

0

是的,当编辑器初始化时,tinymce源元素变得不可访问。这是必要的,因为tinymce会创建一个新的可用内部框架,然后用于编辑文本。编辑文本在几个事件中被写回到以前的textarea。

您要求使用jQuery方法来访问tinymce编辑器的内容。这个有可能。 以下示例显示如何访问编辑器主体元素,查找类别为.js-description的html元素并重置其值。

var editor = tinymce.activeEditor || tinymce.get('my_editor_id') || tinymce.editors[0]; 
$(editor.getBody()).find(".js-description").val('new_val'); 
+0

尝试这样做,遗憾的是,由于tinyMCE.activeEditor的事实,activeEditor为空,直到我点击编辑返回一个空值,最有可能的,我也得到一个“遗漏的类型错误:无法调用的方法‘getBody’ null“在我的Java控制台。不幸的是,我需要在页面加载时发生这些更改,而无需选择活动编辑器(因为一次可以在页面上有一个以上的tinyMCE编辑器)。 – Ryan

+0

我用tinyMCE.activeEditor,因为你已经把它列为你使用它的方式。当编辑器收到用户的点击后,activeEditor会被设置。看到我更新的答案 – Thariama