2014-04-11 202 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,不知道你可以這樣登錄,謝謝你的提示! –

相關問題