通过类获取TinyMCE实例

5

我有一个表单,其中包含多个TinyMCE实例。我使用Repeater控件动态创建了TextArea控件-它们都具有相同的ID,但我为每个控件分配了不同的类。我在TinyMCE Init函数中使用editor_selector选项为每个TextArea控件分配了一个TinyMCE实例。

tinyMCE.init({ mode : 'textareas',theme : 'simple',editor_selector : 'upperBlock',directionality : 'rtl'});  tinyMCE.init({ mode : 'textareas',theme : 'simple',editor_selector : 'middleBlock',directionality : 'rtl'});

我想在JavaScript函数中引用特定的TinyMCE实例并获取其内容。如果每个TextArea控件都有不同的id,可以使用以下方式:
tinyMCE.get('IdOfYourTextBoxWithTheTinyMCEContent').getContent()

有没有一种方法可以在TinyMCE Init函数的editor_selector选项中使用分配给它的类,获取特定TinyMCE实例内容的引用?
谢谢。

很遗憾,目前还没有人回答我的问题。是否有语法或API函数可以通过分配给它的类获取特定的TinyMCE实例内容?你想让我接受一个没有解决方案的答案吗?(这样做会误导其他读者) - ProgNet
不是特指这个问题,但你还有其他问题正在进行中 :) - user57508
欢迎查看我的问题历史和答案。只有在您这样做之后,您才能判断是否有一个好的答案来回答我留下没有得到适当回应的问题。如果您找到一个或多个,请告诉我,我会进行修正(仅检查评分是不够的,需要检查内容)。 - ProgNet
3个回答

7
这不能通过TinyMCE原生方法完成。你需要自己循环处理,例如(未经测试):
for (edId in tinymce.editors) {
        if (tinymce.editors[edId].settings.editor_selector == 'upperBlock') {
        // editor found - do something
    }
}

谢谢你的好回答 :) 我只有一个问题,对于每个编辑器,我都有两个不同的edIds,所以if条件会被执行两次:我用来检查的函数Func() { alert("Inside Func function ");
var i = 1; for (edId in tinymce.editors) { alert("edId : " + edId); if (tinymce.editors[edId].settings.editor_selector == 'upperBlock') { alert("index : " + i ); } i++; } } 我只创建了3个TextArea控件和3个TinyMCE实例,只有一个具有upperBlock值。
- ProgNet
不客气。你是否按照文档中提到的设置modespecific_textareas?http://tinymce.moxiecode.com/wiki.php/Configuration:editor_selector - acme
谢谢,我已经这样做了。但是每个实例仍然会得到2个值,例如对于第一个实例,我得到的是- edId: ctl00_MainContent_EditorialTextTextAreasUC_rptTextAreas_ctl01_txtArea 和 edId: 0。对于第二个实例,我得到的是- edId: ctl00_MainContent_EditorialTextTextAreasUC_rptTextAreas_ctl02_txtArea 和 edId: 1等等。 - ProgNet
看起来页面上的 TinyMCE 实例比应该有的多。tinymce.editors.length 输出了什么? - acme
我创建了三个动态实例。出于某种原因,每个实例都会产生2个不同的edId值。我在“if块”中添加了一个断点来解决这个问题,但我仍然想知道为什么会发生这种情况。附言:请问在TinyMCE文档中我可以找到可以应用于tinymce.editors集合的方法和属性吗?谢谢。 - ProgNet
好问题 - 自从他们更新了主页后,我就少了一些东西。它应该在这里链接:http://tinymce.moxiecode.com/wiki.php/API3:namespace.tinymce。但出于某种原因它消失了.... - acme

2
你做错了,HTML不允许有多个拥有相同ID的元素。请给它们相同的类名和不同的ID。

如果他使用asp-textbox,则ID将获得作用域前缀,因此可能在页面上是唯一的。 - user57508
如果这个答案解决了你的问题,你应该接受它作为解决方案! - user57508
谢谢您的回答。我正在使用 Repeater 控件。在 ItemTemplate 元素中,我编写了 <asp:TextBox ID="txtArea" runat="server" TextMode="MultiLine"> 当控件在客户端呈现时,每个文本框都会获得自己的客户端 ID。我在内容页(MasterPage 的内容页)中使用该控件。我为每个文本框分配了不同的类,因为在某些 JS 函数中使用 JQuery 选择器定位它更容易(无需将生成的客户端控件 ID 传递给函数,并且与 ID 不同,类值在创建页面时永远不会更改)。 - ProgNet

1

如果您想通过类来检索编辑器,则首先必须将这些属性设置为编辑器。

tinymceOptions: {
                  mode: 'specific_textareas',
                  editor_selector: "yourClassName"
                }

那么,您的文本区域将会是这样的:

<textarea class="yourClassName"></textarea>

然后,您可以像这样在所有编辑器之间进行迭代

    tinymce.editors.forEach(function(editor) {
        if (editor.settings.editor_selector === 'yourClassName') {
        // do what you want!
    }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接