2015-05-18 22 views
0

我有一個理解這裏有什麼問題的問題。我使用jQuery找到一個元素,但我無法找到元素的父不使用jQuery:由jQuery返回的DOM元素的父項

$(".selectbox").on("click", function(e) { 
    e = e || window.event; 
    var eTarget = e.target || e.srcElement; 
    find_parent(eTarget); 
}); 

使用上述調用find_parent功能的工作原理:

function find_parent (el) { 
    element_parent = el.parentElement; 
} 

,但如果使用這種調用find_parent失敗:

function someFunction { 
    selectBoxEl = $(".xyz").find('.selectbox'); 
    find_parent (selectBoxEl); 
} 

我不是在尋找「爲什麼不使用jQuery父()」的解決方案 - 它工作正常。我想瞭解爲什麼正常的DOM方法不能在jQuery返回的元素上工作,以及我做錯了什麼。

編輯: 示例代碼,不使用實際的代碼,而是一個非常簡化的版本來說明我的問題。實際的find_parent()函數是一個漫長而複雜的部分,它經歷了許多元素及其父母的各種更新,並且它不使用jQuery。我想利用該代碼,而不是爲了我的需要在示例函數someFunction()中複製它。

+1

你有錯字...方法調用和圓括號之間不應有空格'find_parent(selectBoxEl);' –

+0

[jQuery對象和DOM元素]的可能重複(http://stackoverflow.com/questions/6974582/jquery-object-and-dom-element) –

+0

由於您使用的是jQuery,因此事件對象已經過標準化,因此不需要在其中包含瀏覽器特定的代碼。所以'$(「。selectbox」)。on(「click」,function(e)var parent = $(e.target).parent(); });' –

回答

2

jQuery返回的元素被包裝。使用find_parent(selectBoxEl[0]);

+0

你的意思是由* .find *返回的對象不是一個DOM元素,它是一個jQuery實例,並沒有* parentElement *屬性(儘管我敢說會有一天返回一個* parentElement *方法另一個帶有單個成員的jQuery對象,它是匹配集合中第一個元素的parentNode,或根本沒有成員)。 – RobG

1

由於您已經在使用jQuery,因此不需要使用單獨的函數來標識父DOM元素。 $('#id').parent()返回父DOM元素。

如果您想使用.parentElement javascript方法,請使用下面的方法。

$('#id')[0].parentElement 

JQuery實際上並沒有返回任何DOM元素,它只會返回DOM對象的實例。 parentElement propery必須僅適用於DOM元素,而不適用於實例對象。