2008-10-28 44 views
7

我想使用兩個jQuery對象來檢查祖先。他們沒有ID,只能作爲jQuery對象使用(如果你叫get(),那麼就是DOM節點)。 jQuery的is()只與表達的作品,所以這段代碼將是理想的,但將無法正常工作:使用jQuery對象的jQuery祖先

var someDiv = $('#div'); 

$('a').click(function() { 
    if ($(this).parents().is(someDiv)) { 
     alert('boo'); 
    } 
} 

只是想看看一個元素是另一個的孩子,我想避免步回DOM土地如果可能。

回答

12

您可以使用index()方法來檢查一個元素是否存在於一個列表中,下面的工作也是如此?

var someDiv = $('#div'); 

$('a').click(function() { 
    if ($(this).parents().index(someDiv) >= 0) { 
     alert('boo'); 
    } 
} 

#index reference

+0

完美加雷,謝謝!我會爲你投票,但是我微薄的11個聲望得分阻止了我這樣做。 – MichaelThompson 2008-10-29 15:23:31

1

沿着這一思路,父母()隨意接受一個選擇本身:

$('a').click(function() { 
    if ($(this).parents("#div").length) { 
    alert('boo'); 
    } 
}); 
+0

.parents()只接受最基本的選擇器(即只有描述單個元素的選擇器纔會起作用 - 而不是描述諸如「p strong」之類的ancetry的選擇器)。 – 2008-10-29 02:45:28

+0

對於他想要做的事情,它工作得很好。 – 2008-10-29 05:33:37

0

的一種方法是使用過濾功能

$('a').click(function() { 
    $(this).parents().filter(function() { 
     return this == someDiv[0]; 
    }).each(function() { 
     alert('foo'); 
    }) 
} 

我想你也可能能夠逃脫與使用jQuery.inArray

if ($.inArray(someDiv, $(this).parents())) { 
     alert('boo'); 
} 
0

你會得到你想要的結果只是使用CSS se講師?

$('#div a').click(function() { ... }); 
10

檢查(this).parents().index(someDiv) >= 0,正如@Gareth的建議,可以正常工作。

但是,使用jQuery ancestry plugin方式更快/更有效率

0

試試這個:

var someDiv = $('#div'); 

$('a').click(function() { 
    if ($.inArray($(this).parents().get(), someDiv.get(0)) { 
     alert('boo'); 
    } 
} 
0
var $element = $('a'); 
while ($element && !$element.is('someDiv')) { 
    var $element = $element.parent(); 
};