从 javascript 中的选择中获取强大的外部元素
Get strong outer element from selection in javascript
我想在 Javascript 中获取 getSeletion() 元素的强元素。 我有一个这样的 HTML:
<div contenteditable="true">
<strong>TEST</strong>
</div>
我已经用这个JavaScript代码测试了它
function getSelectionParentElement() {
var parentEl = null, sel;
if (window.getSelection) {
sel = window.getSelection();
if (sel.rangeCount) {
parentEl = sel.getRangeAt(0).commonAncestorContainer;
if (parentEl.nodeType != 1) {
parentEl = parentEl.parentNode;
}
}
} else if ( (sel = document.selection) && sel.type != "Control") {
parentEl = sel.createRange().parentElement();
}
return parentEl;
}
并使用 window.getSelection().anchorNode.parentElement 或 selection.getRangeAt(0).startContainer.parentNode
但它只返回div 而不是强元素。
根据我的测试,当选择仅限于强元素时,您的getSelectionParentElement()
函数将返回"强"元素。请看这个小提琴演示:
http://jsfiddle.net/akfg87n6/
如果您仅从 TEST 中选择字母,则它返回强元素,而如果您从div 中选择字母(我添加了"之前"和"之后"文本以使其成为可能),则它返回div 元素。
根据 https://developer.mozilla.org/en/docs/Web/API/Range commonAncestorContainer()
文档,这是预期的:
Range.commonAncestorContainer [只读] 返回包含 startContainer 和 endContainer 节点的最深节点。
当整个文本选择驻留在强元素中时,强元素是包含开始和结束容器节点的最深节点(顺便说一下,在这种情况下,它们都是强元素)。但是,如果所选内容从强元素扩展到div 内容之外,则强元素不再包含整个选择内容,因此commonAncestorContainer()
必须返回一个较浅的元素,如果文本选择仍局限于div 内容,则该元素将是div。
解决方案很简单。我使用Rangy。它具有主要浏览器的功能。你可以通过以下方式获取元素:rangy.getSelection().focusNode.parentElement.localName
- 如何使内部元素具有位置:绝对覆盖溢出:隐藏外部元素
- jQuery 单击外部元素可向上或向下移动包含选中复选框的无序列表项
- 从 javascript 中的选择中获取强大的外部元素
- 根据 c3 条形图中的坐标对齐外部元素
- 使用 jquery 删除外部元素
- 影响当前外部元素中的另一个元素
- 如何使用Jquery删除xml中的外部元素
- Angular指令,将click事件绑定到外部元素不起作用
- fullcalendar中删除的外部元素的结束时间没有'拖动到新位置之前不应用
- 如何在JavaScript中获取外部元素值
- 如何添加一个外部元素日期块的3天拖动n'用全压延机落下
- 如何禁用外部元素中的滚动
- 如何在FullCalendar中使用外部元素获取drop和eventDrop的结束时间
- 如何在外部元素掉落的基础上更改背景颜色's id:完整日历
- 如何使用CSS或JavaScript使内部元素在固定的外部元素中滚动
- 是否可以禁用外部元素上的滚动并保持内部元素上的滑动
- 获取外部元素的html
- 将变量传递给Google Maps事件对象.(谷歌地图多边形,外部元素悬停)
- 是否可以通过jQuery.load()加载外部元素后滚动到锚点
- 单击外部元素- JQuery