2012-05-12 55 views
7

我使用的rangy库,如下可以选择在内容文字可编辑选定的文本:获取父节点与瘦长库

var sel = rangy.getSelection(); 
alert(sel); 

我无法弄清楚如何让所选择的文本父节点/元素。例如,如果我选择的文本是

<strong>My Text</strong> 
or 
<h1>My Title</h1> 

如何包含强节点或H1元素?

+1

梅西一些更多我看到我可以使用:sel.anchorNode.parentNode.nodeName – Frank

回答

8

sel.anchorNode.parentNode会让您获得仅包含选区一端的节点的父节点。要获得整个选区的最内层元素,最简单的方法是从选区中获取一个Range并查看其commonAncestorContainer属性(可能是文本节点,在这种情况下,您需要获取其父项):

var sel = rangy.getSelection(); 
if (sel.rangeCount > 0) { 
    var range = sel.getRangeAt(0); 
    var parentElement = range.commonAncestorContainer; 
    if (parentElement.nodeType == 3) { 
     parentElement = parentElement.parentNode; 
    } 
} 
+0

非常感谢! – Frank

+0

只有当我们在'strong'或'h1'标签中选择文本时,才会有效,而不是在同时选中时。对于这两个标签(text:text my)的选定片段如何做到这一点? – kicaj