Javascript 如何确定某个元素是否直接围绕文本选择范围,如果是,它是什么元素?
我正在开发一个富文本编辑器,可以按照Aloha的思路嵌入到网页中。当前我遇到的问题是,当围绕用户创建的文本选择插入或更新链接时,我需要知道该选择周围是否已经存在链接,以便我可以分别进行更新或插入 例如,假设方括号([和])表示选定范围的边界: 案例1:Javascript 如何确定某个元素是否直接围绕文本选择范围,如果是,它是什么元素?,javascript,dom,text,wysiwyg,textselection,Javascript,Dom,Text,Wysiwyg,Textselection,我正在开发一个富文本编辑器,可以按照Aloha的思路嵌入到网页中。当前我遇到的问题是,当围绕用户创建的文本选择插入或更新链接时,我需要知道该选择周围是否已经存在链接,以便我可以分别进行更新或插入 例如,假设方括号([和])表示选定范围的边界: 案例1: this is [some unlinked text] 案例2: this is <a href='stackoverflow.com'>some [linked] text</a> 这是 案例3: this is
this is [some unlinked text]
案例2:
this is <a href='stackoverflow.com'>some [linked] text</a>
这是
案例3:
this is <a href='stackoverflow.com'>[some linked text]</a>
这是
在案例1和案例2中,我想知道没有一个元素会立即包围选定的文本,而在案例3中,我想得到一个锚定标记,它会立即包围选定的文本。我想知道一个高效的跨浏览器解决方案会是什么样子
另外,我知道Range
对象有一个commonAncestorContainer
属性,但有时该属性引用文本节点而不是元素节点。使用jQuery:
getWrappingElement = function(range) {
var $wrapper;
$wrapper = $(range.commonAncestorContainer);
// handle cases in which range.commonAncestorContainer is a text node
if ($wrapper.parent().text().trim() === range.toString().trim()) {
$wrapper = $wrapper.parent();
}
if ($wrapper.get(0).nodeType === document.ELEMENT_NODE) {
return $wrapper;
} else {
return false;
}
}
其中range
是range
对象