Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我返回时没有定义?_Javascript_Jquery_Attr_Rangy - Fatal编程技术网

Javascript 为什么我返回时没有定义?

Javascript 为什么我返回时没有定义?,javascript,jquery,attr,rangy,Javascript,Jquery,Attr,Rangy,我想获得光标所在的父元素的属性 我已经完全失败了大约两个小时了,所以我正在发帖,看看有没有人有什么建议。这是我拥有的函数,但不知道为什么parentID只返回未定义的: function getAttrOfParent() { var newRange = rangy.getSelection().getRangeAt(0); var parentElement = newRange.commonAncestorContainer; var parentID = $(pa

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

我已经完全失败了大约两个小时了,所以我正在发帖,看看有没有人有什么建议。这是我拥有的函数,但不知道为什么
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);
}

,您必须单击文本区域内的前两个函数才能工作。

parentElement=newRange.commonAncestorContainer
不是给您父元素,而是给您父节点

如果您
console.log(parentElement)
查看所选内容,这一点非常明显

如果选择的文本完全位于其中一个跨距(具有id)内,则会得到文本节点(没有id)

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


您可能希望尝试类似于
var parentElement=$(newRange.commonAncestorContainer.parents('span')

在小提琴中,您使用的是
.attr('title')
而不是
.attr('id')
。后者效果很好。但也许我不明白你到底想要什么。这里有两个
p
元素,它们既没有
id
属性,也没有
title
属性。因此,您当然会得到
未定义的
。您的第一个函数由于一个巨大的错误而崩溃:
未捕获的DOM异常:INDEX\u SIZE\u ERR
@Felix Kling我修复了小提琴,但是
.attr('id')
仍然不能工作。@CircleB:请查看对我的注释的编辑。@Felix Kling是的,我知道我会为这些设置未定义的,在我的完整函数中,我在做这个函数之前检查我是否在一个范围内…为了简单起见,我去掉了所有这些。这非常有效!另外,我不熟悉javascript,也不知道你可以这样登录,谢谢你的提示!