2010-01-10 59 views
0

所以,我有我的网页上TinyMCE的形式的插件添加到内容块,这是预填“部分”(具有特定类名称的div)。测试,看看你是在TinyMCE的特定内容块,不允许如果它

我有一对夫妇,将增加更多的“节”在TinyMCE插件。

我需要它,所以当我按下按钮插件,它会测试,以确保光标是不是“部分”内另有“部分”内的“节”粘贴。

不知道我需要做到这一点的方向。任何帮助都会很棒。

的详细信息: 所以下面是添加一个按钮,只是插入一个简单的DOV到在选择/光标在编辑器插件的例子。

ed.addButton('pluginbutton', { 
    title : 'MyPlugin', 
    image : 'img/test.png', 
    onclick : function() { 
     ed.selection.setContent('<div>test</div>'); 
    } 
}); 

我目前认为onBeforeSetContent是API事件处理程序,我需要设置处理是否我是在另一部分,如果是将消息发送到屏幕上。如果不只是执行setContent方法。我不确定如何设置,但我仍然在想这个。这里有帮助吗?

回答

4

既然你好像控制了这个插件,下面是我如何编辑它的工作。

说明:我正在使用jQuery方法closest。我想你是jQuery核心团队的成员,你可能使用它来完成这个项目。如果不是,只需根据需要重构该行。最重要的部分是selection.getNode()返回既是起点和终点选择点的父:

ed.addButton('pluginbutton', { 
    title : 'MyPlugin', 
    image : 'img/test.png', 
    onclick : function() { 
     if(!$(ed.selection.getNode()).closest('div.section').length){ 
      ed.selection.setContent('<div class="section">test</div>'); 
     } 
    } 
}); 

更多的想法

而且DOM元素,让你的插件足够的认识,因此深得“T把divp标签的孩子,你可以做这样的事情:

这个上面的onclick替换:

onclick: function(){ 
    var $node = $(ed.selection.getNode()); 
    if(!$node.closest('div.section').length){ 
     // Get highest element that is a direct child of the `body` tag: 
     var $parent = $node.closest('body > *'); 
     // Wrap with our special section div 
     if($parent.length) $parent.wrap('<div class="section"></div>'); 
    } 
} 
+0

偷偷摸摸的JQuery实现!尼斯。另一个共同创作功能的案例。 – 2010-01-10 19:52:28

+0

@Pekka完全...我们真的需要建议。也许我会在本周输入它。 – 2010-01-10 20:01:34

+0

HA我在第一个例子中已经有了类似于你的东西。 – RedWolves 2010-01-10 20:12:50

1

我不知道TinyMCE的具体,但它应该是可以从ed.selection提取当前DOM元素。如果这是可能的(我敢肯定,它是使用某种形式的getter函数或属性),你应该能够做到以下几点:

  • 马克用一个id或类(” <div class='protected'>一个“禁”区“)
  • 横移通过选择的祖先(使用元件的parentNode属性),并检查父元素中的一个是否具有‘受保护的’类或ID。
  • 如果找到了ID,请不要执行setContent();否则执行它。
+0

+1伟大的轮廓。你是对的,'selection.getNode()'返回上下文DOM元素。 – 2010-01-10 19:46:37

相关问题