CKEditor插件-为所选文本迭代多个DOM元素的正确方法
CKEditor plugin - Proper way to iterate multiple DOM elements for selected text
我在CKEditor插件中选择了以下文本。
monkey needs <span answer="banana">food</span> today
我可以使用以下代码检索banana
editor.on( 'dialogShow', function( dialogShowEvent )
{
var selection = editor.getSelection();
if (selection) {
var selectedElement = selection.getSelectedElement();
// http://ckeditor.com/forums/Support/GetSelectedElement-returns-null-IE-and-Chrome-BUG
if (selectedElement == null) {
// I have no idea whether this is a correct workaround? Just pray...
selectedElement = selection.getStartElement();
}
if (selectedElement == null) {
return;
}
// Yes :)
var banana = selectedElement.getAttribute('answer');
然而,如果我们选择的文本是,代码就会中断
monkey needs <span answer="banana"><strong>food</strong></span> today
我可以知道迭代所选文本的DOM元素的正确方法是什么吗?我希望我们有类似getSelectedElements
(复数)的东西。但是,我找不到。
如果要检查从selection.getStartElement()
到editor.editable()
的所有元素,则可以使用dom.elementPath
。
var elementPath = editor.elementPath();
var answerElement = elementPath.contains( function( el ) {
return el.hasAttribute( 'answer' );
} );
另一方面,如果您希望按DFS顺序(源顺序)遍历DOM树,则需要使用dom.walker
:
var range = sel.getRanges()[ 0 ],
walker = new CKEDITOR.dom.walker( range ),
node;
while ( ( node = walker.next() ) ) {
// .. do something
}
根据具体情况,你可能想做十几件其他事情,所以我无法描述所有这些。在dom.range
类、dom.element
或dom.iterator
中有许多方法。
相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何在DOM元素上按类型构建此函数
- DOM元素和angular元素之间的主要区别是什么
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- 如何使用JavaScript在没有html dom的情况下隐藏html元素
- 使用jquery创建dom元素会导致ie9出现拒绝访问错误
- 通过AJAX侦听向DOM添加某些元素
- 如何在使用Ractive.extend()时引用DOM元素
- 在d3中向DOM元素添加了图像,但现在它赢得了't过渡
- Selenium无法在浏览器DOM中定位元素
- 如何'剪切'DOM元素并将其显示在其他位置
- 转换<a>使用jQuery将文本字符串转换为dom元素
- 从dom中删除任何元素后,Touchmove事件停止触发
- d3在数据更新时错误地附加了dom元素
- 访问VueJS中的DOM元素
- 在Meteor中如何查找DOM元素(渲染后)
- 找到元素DOM的根节点(阴影或光)的最佳方法是什么?
- 在querySelector:如何获得第一个和最后一个元素?dom中使用的遍历顺序