2008-10-28 43 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(); 
};