Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CKEditor,带子对象的自定义对象_Javascript_Ckeditor - Fatal编程技术网

Javascript CKEditor,带子对象的自定义对象

Javascript CKEditor,带子对象的自定义对象,javascript,ckeditor,Javascript,Ckeditor,我正在尝试为CKEditor创建一个插件,添加一个带有子对象的自定义对象 例如: <div> <img src="someimage.jpg" /> <p> Some text <span>Some subtext</span> </p> <img src="someStaticImage.jpg" /> </div> 我想让这个块作为

我正在尝试为CKEditor创建一个插件,添加一个带有子对象的自定义对象

例如:

<div>
    <img src="someimage.jpg" />
    <p>
        Some text
        <span>Some subtext</span>
    </p>
    <img src="someStaticImage.jpg" />
</div>
我想让这个块作为一个单一的元素,这意味着按backspace删除整个块,双击它打开编辑对话框

你知道我怎么做吗

我接近于设定

this.element.setAttribute('contenteditable','false');
但是,如果“it”是ckedit窗口中的第一个元素,则不允许在“it”之前插入内容

编辑:

更多信息: 我使用的是CKEditor 4.0,内联版本 我希望我的“对象”类似于“图像”插件,当你双击图像时,会打开一个对话框,与你创建对象时的对话框相同(在这里设置src,width…)。
我设法使它与之类似,但因为它是一个带有子元素的div,所以CKEditor将每个部分视为单独的,这使得对象的删除(带backspace)以一种更为复杂的方式进行,只删除其中的一部分,要删除整个对象,需要多次按backspace键。

您表示已经创建了处理该对象的插件,但要解决的问题是,当对象是第一项时,无法在其前面插入内容

此错误报告似乎与此问题有关:

我使用插件将这段代码插入编辑器:

  <div contenteditable="false">
      <img src="someimage.jpg" />
      <p>
          Some text
          <span>Some subtext</span>
      </p>
      <img src="someStaticImage.jpg" />
  </div>

需要使用以下命令将其添加到配置文件中:

config.extraPlugins = 'cwmarinsertsnippet';
要使按钮可见,需要将按钮名称“CwMarInsertSnippet”添加到配置工具栏条目中:

CKEDITOR.config.toolbar_XXXX
  [
Snip...
    { name: 'tools',        items : [ 'About','CwMarInsertSnippet' ] },
... End Snip
  ];
插件的按钮应该是13px X 13px(对于CkEditor 3.X,不确定版本4.X)。它放在这里:
ckeditor/plugins/cwmarinsertsnippet/images

该名称应与插件代码末尾的
editor.ui.addButton
函数中使用的名称相匹配(该路径可以位于您想要的任何位置)


下面是要添加到使用CkEditor的页面的代码示例:

<div id ="resmar">
  <div contenteditable="false">
      <img src="someimage.jpg" />
      <p>
          Some text
          <span>Some subtext</span>
      </p>
      <img src="someStaticImage.jpg" />
  </div>
</div>
如果容器元素不应该出现在页面上,则可以使用样式将其隐藏

基本上,只需将要插入的内容放入具有目标ID的元素中

<div id ="resmar">
  Content to be inserted.
</div>

要插入的内容。


当然,插件名称和元素ID可以是您喜欢的任何内容。

我是一名CKEditor核心开发人员,我想我有一个有趣的消息要告诉您:)。巧合的是,现在我们正在研究你的意思

通过设置
contenteditable=false使页面的某些片段不可编辑,使其不可用。选择、复制和粘贴、右键单击、使用箭头键-所有这些都至少部分中断。如果你试图添加一个嵌套的可编辑元素(内部可编辑,不可编辑),情况会更糟,因为它可以从内部删除

这就是为什么我们决定实现一个很好的API来创建小部件并修复所有这些bug。也许一开始并不是所有的浏览器都有bug,因为它们的数量很大(真的……我是说huuuge:P),当然浏览器之间根本没有标准的行为。但这将是一个良好的开端。即将在CKEditor 4.2中发布的小部件的第一个版本应该是可用的——这是我们的目标。然后,我们将重点关注稳定实现


PS.表示CKE 4.2将在11天内准备就绪,但不幸的是,这不是事实。我们被延迟了,但我现在不想估计有多大。

如果插件在插入块之前插入一个空div,那么您可能可以将光标放在它之前插入内容,即使它位于顶部?好主意,但CKEditor会自动在空元素中插入一个(我希望其他元素也具有该功能),因此在元素上方创建了一个空格,我不希望这样。此外,我希望能够单击元素的右侧以显示插入符号,如图像。您可以提供更多详细信息吗?您使用的是哪个版本的CkEditor?如果是4,您使用的是标准方法还是内联方法?如果包含更完整的代码,会更容易提供帮助示例:一个完整的
,包含所有特定于问题的内容。在
中使用的任何脚本。插件代码。看起来你在插件之外添加对象,那么插件做什么呢?我创建了一个插件,在编辑器中插入一个块(CkEditor 3.x),因此可以将其作为插件的一部分。您说“双击它打开编辑对话框”,而“按backspace删除整个块”。如果您已经在编辑器中,双击如何打开编辑对话框?您是否将其视为由插件控制的对象类型,就像图像元素由CkEditor图像插件控制一样?@codewaggle您可以共享该插件,以便我检查我的问题的答案是否在其中?此外,我编辑了帖子,添加了一个附加信息,希望它能更好地解释我的问题。好消息!我想我会用一个临时的凌乱的javascript使它以某种方式工作,直到新版本发布,希望很快:)好概念!我正准备开始使用4.x,这是另一个转换的动机。
<div id ="resmar">
  <div contenteditable="false">
      <img src="someimage.jpg" />
      <p>
          Some text
          <span>Some subtext</span>
      </p>
      <img src="someStaticImage.jpg" />
  </div>
</div>
  <div style="display:inline-block" contenteditable="false">
<div id ="resmar">
  Content to be inserted.
</div>