使用setNode()更新所选节点时,出现了TinyMCE 4节点重复问题
TinyMCE 4 node duplication issue when updating selected node using setNode()
使用TinyMCE 4,我试图实现一个具有相当简单功能的按钮:对于选中的(突出显示的)节点,我想通过单击该按钮来更新其类。
我正在使用setNode()
函数更新节点。问题是,我没有像预期的那样更新现有节点,而是得到了一个重复的节点。
例如,假设我在tinyMCE主体中有以下文本:
<p>This is a paragraph.</p>
高亮显示文本并点击"MyButton"后的预期结果:
<p class="updated">This is a paragraph.</p>
我得到的却是:
<p class="updated">
<p class="updated">This is a paragraph.</p>
</p>
所以由于某种原因,节点被复制了(或者被同一个节点包装了?),我不明白为什么。
相关代码:<script type="text/javascript">
tinymce.init({
//...
setup: function(editor){
editor.addButton('MyButton', {
name: 'MyButton',
text: 'MyButton',
icon: false,
onclick: function() {
var selectedNode = window.parent.tinyMCE.activeEditor.selection.getNode(), //get the selected node
updatedNode = $(selectedNode).addClass('updated'); //perform desired modifications to it
updatedNode = updatedNode.get(0); //return the javascript element
//update the node:
window.parent.tinyMCE.activeEditor.selection.setNode(updatedNode);
}//end onclick
});//end addButton
}//end setup
});//end tinymce.init
</script>
EDIT:我终于找到了一个解决方法。不是创建一个新节点(updatedContent
),然后用它来设置所选节点的内容(window.parent.tinyMCE.activeEditor.selection.setContent(updatedContent);
),而是直接更新所选节点(selectedNode
)。像这样:
$(selectedNode).addClass('updated');
我终于明白是怎么回事了。
看一下这段代码:
var updatedNode = $(selectedNode).addClass('updated');
这一行实际上做了两件事:它向所选节点添加了一个类,但它也将这个结果存储在updatedNode中。
到目前为止,DOM应该是这样的:<p class="updated">This is some paragraph.</p>
那么这行运行:
window.parent.tinyMCE.activeEditor.selection.setNode(updatedNode);
,它实际上做到了它所承诺的:它设置所选节点的内容…
它取选中的节点,在这一点上看起来是这样的:
<p class="updated">This is some paragraph.</p>
换句话说,它将其内容替换为updatedNode
,即<p class="updated">
和</p>
标签之间的内容,如下所示:
<p class="updated">This is some paragraph.</p>
所以用<p class="updated">This is some paragraph.</p>
代替This is some paragraph
是非常正确的。因此,我们得到了意想不到的结果……
<p class="updated"><p class="updated">This is some paragraph.</p></p>
我现在明白了这个问题很微妙,而且确实是针对我的情况。然而,我还是决定把这个解释贴出来,希望有一天它能帮助到别人。
相关文章:
- 节点导出返回一个空对象
- 可以前端maven插件使用节点,npm已经安装
- 在jstree中,如何将指定的节点集中到大型树上
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- WebDriverException:tinyMCE未在selenium Web driver java中定义
- d3基于用户选择动态更新节点
- 有条件更新d3.js力图中节点的最佳方法
- 在Angular Fullstack中设置TinyMCE
- 如何处理node.js节点mongodb中的连接和查询队列
- 将DOM节点值与字符串Javascript进行比较
- PHP:显示sqlite数据库中的html格式数据,使用tinymce保存
- 节点fs.stat名称未定义
- Tinymce节点内容已更改
- 循环通过TinyMCE中当前节点的子节点
- Tinymce:如何获取所选节点的格式
- TinyMCE替换父节点
- TinyMCE -我如何可靠地获得在模糊事件之前被选中的节点
- 使用setNode()更新所选节点时,出现了TinyMCE 4节点重复问题