我想在使用AJAX请求创建tinyMCE编辑器后设置内容。我在页面上有几位编辑。所有这些都初始化为:
tinymce.init({
selector: '.tiny-mce'
});
每个编辑器都有一个独特的类来将它们彼此分开。 在使用AJAX请求获取数据后,如何使用此类将内容设置为一个特定的编辑器?
tinyMCE.get('.class_name') // returns null
我正在搜索API和SO而无法找到执行这么简单的功能。
编辑:
我发现获取编辑器实例并不是那么干净。创建tinyMCE时,它会向元素添加带编辑器名称的id。现在我可以这样做:
var id = $('.class_name').attr('id');
tinyMCE.get(id).setContent('new content');
但是有更好的方法吗?
答案 0 :(得分:10)
根据get()
API,您传递给该调用的字符串必须是编辑器元素的 ID ,而不是Class。
https://www.tinymce.com/docs/api/class/tinymce/#get
因此,如果你想根据ID定位编辑器,你需要这样的东西:
<textarea class='tiny-mce' id='editor1'></textarea>
<textarea class='tiny-mce' id='editor2'></textarea>
...在你的JavaScript中就像这样......
tinymce.get('editor2').setContent('...content here...');
如果页面上只有一个编辑器,您也可以使用
tinymce.getActiveEditor().setContent('...content here...');
编辑:这取决于您在编辑器生命周期中 时调用get()
或activeEditor()
方法。< / p>
在TinyMCE完全初始化之前,这些都不会返回任何内容。如果你有这样的代码:
<form method="post" action="dump.php">
<textarea class='tiny-mce' id='editor1'></textarea>
<textarea class='tiny-mce' id='editor2'></textarea>
</form>
<script>
tinymce.get('editor2').setContent("content here");
</script>
这通常会失败,因为您不知道TinyMCE是否在JavaScript运行时完成初始化textareas。请看这个小提琴:
http://fiddle.tinymce.com/gufaab/1
将内容加载到编辑器中的最佳方法是使用编辑器自己的&#34; init&#34;回调并将代码放在那里。例如:
tinymce.init({
selector: "textarea",
plugins: [
"advlist autolink lists link image charmap print preview anchor",
"searchreplace visualblocks code fullscreen",
"insertdatetime media table contextmenu paste"
],
toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
setup: function (editor) {
editor.on('init', function () {
this.setContent('The init function knows on which editor its called - this is for ' + editor.id);
});
}
});
...请注意,每个编辑器都会调用init(如果有多个),并且如果需要,您可以访问DOM中的编辑器对象。
答案 1 :(得分:2)
您可以在选择器中使用id,并在使用回调函数初始化编辑器后设置内容:
tinymce.init({
selector: 'textarea#tinymce1',
init_instance_callback : function(){
tinymce.get('tinymce1').setContent(data)
}
});
这是html
<textarea id="tinymce1"></textarea>
使用init_instance_callback,因为如果使用ajax请求设置内容,它可能比编辑器的初始化更快
答案 2 :(得分:-1)
使用id选择器而不是类选择器时,TinyMCE的效果更好。 初始化编辑器时,可以使用init_instance_callback设置内容。
仅当您有一个id选择器时才有效。
HTML:
<textarea id="editor1"></textarea>
JS:
tinymce.init({
selector: 'textarea#editor1',
init_instance_callback: function (editor) {
editor.setContent("content here");
}
});
OR
function setContent(editor) {
editor.setContent("content here");
}
tinymce.init({
selector: 'textarea#editor1',
init_instance_callback: setContent
});