2014-04-11 208 views
0

我想获得我的光标所在的父元素的属性。为什么我返回undefined?

我现在大概两个小时完全没有成功,所以我张贴了看有没有人有任何建议。这是我有,但不知道为什么只parentID返回未定义功能:

function getAttrOfParent() { 
    var newRange = rangy.getSelection().getRangeAt(0); 
    var parentElement = newRange.commonAncestorContainer; 
    var parentID = $(parentElement).attr('id'); 
    alert(parentID); 
} 

这正常获取父元素的文本...

function getTextOfParent() { 
    var newRange = rangy.getSelection().getRangeAt(0); 
    var parentElement = newRange.commonAncestorContainer; 
    var parentText = $(parentElement).text(); 
    alert(parentText); 
} 

...这可以很好地获得指定元素的标题。

function getAttrOfElement() { 
    var parentID = $('#1').attr('id'); 
    alert(parentID); 
} 

Here's my jsFiddle,您必须将文本区域内单击前两个功能一起工作。

+0

在你的小提琴,你正在使用'.attr( '标题')',而不是'.attr( 'ID')'。后者工作正常。但也许我不明白你想要什么。你有几个'p'元素,它们既没有'id'也没有'title'属性。所以当然你会得到'undefined'。 –

+0

你的第一个函数会因为一个很大的错误而崩溃:'未捕获到的DOM异常:INDEX_SIZE_ERR' – David

+0

@Felix Kling我修正了小提琴,但'.attr('id')'仍然不起作用。 –

回答

1

parentElement = newRange.commonAncestorContainer没有给你父母元素,它给你父母节点

这很明显,如果你console.log(parentElement)看到什么被选中。

如果您完全在您的一个跨度(其中包含ids)内选择文本,则会得到文本节点(该节点没有id)。

如果选择更多文本,则会得到段落元素节点(没有id)。

你可能想尝试像var parentElement = $(newRange.commonAncestorContainer).parents('span');

+0

这很好用!P.S.我不熟悉JavaScript,不知道你可以这样登录,谢谢你的提示! –

相关问题