2010-04-20 23 views
6

我想找到最近的元素,其中包含一个类....这是努力找到当前元素的“堂兄”,我有.. 以下没有工作:jquery cousin元素

$('myelement').closest ('*:has(.class1)').find('class_cousin') 

我使用*closest,因为我不知道元素是什么类型的,我找的人我也不知道是否有任何类或ID(我试图保持它一般用于插件)

任何想法如何做到这一点? 谢谢

+0

你是说你知道类,你正在试图获得与最接近'()',或者你没有? – user113716 2010-04-20 22:11:51

回答

8

我觉得你很接近。像这样的东西应该工作:

$('myelement').closest(':has(.yourClass)').find('.yourClass') 

我认为,关键是你要寻找的是有你正在寻找的特定类最接近的父母,则希望找到特定对象。

当然,上面的问题是它不一定找到.yourClass的一个实例。你可以有一个具有多个表亲对象的父对象。我也不确定上面的查询有多昂贵。可能存在性能问题。

+0

像一个魅力工作。 这是一个表单验证插件(我知道有[R万吨他们在那里,但我想经过锻炼,也许让一些更灵活的)......我猜我想说的是,性能并不重要得多这里:) 我感谢帮助 – salmane 2010-04-20 22:19:58

0

我是新来的StackOverflow,我不知道如果我能不能这么做,但我编辑@robjb的答案按我的需要,并张贴在这里,万一如果它可以帮助别人。完全信贷仅限于他。

在情况下,如果有人想只选择特定的表兄妹,而不是所有的堂兄弟(即要用选择),那么我们可以用下面的函数。如果选择器没有作为参数传递,那么它会给所有的表兄弟。

(function($) { 
$.fn.cousins = function(selector) { 
    var cousins; 
    this.each(function() { 
     var auntsAndUncles = $(this).parent().siblings(); 
     auntsAndUncles.each(function() { 
      if(cousins == null) { 
       if(selector) 
        cousins = auntsAndUncles.children(selector); 
       else 
        cousins = auntsAndUncles.children(); 
      } 
      else { 
       if(selector) 
        cousins.add(auntsAndUncles.children(selector)); 
       else 
        cousins.add(auntsAndUncles.children()); 
      } 
     }); 
    }); 
    return cousins; 
    } 
})(jQuery) 

例使用上述功能将作为

$(clickedObj).cousins('.singleWheel'); 

上面的回答只给表兄弟。