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,也不知道你可以这样登录,谢谢你的提示!