为什么我退回未定义?

时间:2014-04-11 20:23:22

标签: javascript jquery attr rangy

我想获取光标所在的父元素的属性。

我现在已经完全失败了大约两个小时,所以我发帖看看是否有人有任何建议。这是我的功能,但不知道为什么parentID只返回undefined:

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,您必须在文本区域内单击才能使前两个功能起作用。

1 个答案:

答案 0 :(得分:1)

parentElement = newRange.commonAncestorContainer没有为您提供父元素,它会为您提供父节点

如果您console.log(parentElement)看到正在选择的内容,这是非常明显的。

如果你在一个跨度(有ids)内完全选择文本,那么你会得到 text 节点(它没有id)。

如果您选择更多文字,则会获得段落元素节点(它没有ID)。

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

之类的内容