2011-05-10 59 views
3

是否有可能在不离开链条的情况下将jQuery元素的子元素添加到集合中?将元素的子元素添加到jQuery中而不离开链条

也就是说,离开它应该是这样的:

var set = $('.some-elements'); 
set.add('*', set); 
// or immediate ones only 
set.add(set.children()); 

我正在寻找一种方式做这些,而无需创建临时set变量:

$('.some-elements').jqMagic("*"); 

(当然可以为此写一个“jqMagic”插件,我只想确定jQuery核心中没有这个功能。)

+0

您是否在某些事件中添加了孩子?像'click'或'change'或watever.if是然后看到[委托](http://api.jquery.com/delegate/) – diEcho 2011-05-10 08:24:32

+1

你可以用'set'开始链(我不会创建一个插件只是为了保存一行代码)。唯一的另一种方法是再次使用'$('。some-elements')'... – 2011-05-10 08:26:16

+0

更正:这不是唯一的方法;)只有当你在一个方向思考时,即先获得“父集”然后添加孩子。但它的工作原理是首先选择孩子,然后再次添加父母,就像@Nathan显示的那样... – 2011-05-10 08:44:02

回答

6

我相信AndSelf会让你做你想问的问题。

更新例如:

考虑下面的HTML:

<div id="1" class="testdiv"> 
    <a href="#">test a</a> 
    <a href="#">test b</a> 
</div> 


<div id="2" class="testdiv"> 
    <a href="#">test c</a> 
    <a href="#">test d</a> 
</div> 

此代码只给出儿童(锚标记在这种情况下)红色的边框:

<script language="javascript" type="text/javascript"> 

    $('.testdiv').children().css('border','solid 1px red'); 

</script> 

而这段代码(使用andSelf())在元素列表中包含父div,因此选择父div和子div - t hus按照您的要求给出合并后的集合:

<script language="javascript" type="text/javascript"> 

    $('.testdiv').children().andSelf().css('border','solid 1px red'); 

</script> 
+0

+1上的第二个想法可能足够了... – 2011-05-10 08:36:07

+1

@Felix Kling - 提供的示例:) – Nathan 2011-05-10 08:38:28

+0

谢谢...我的思想扭曲了,这就是为什么我看不到它应该如何工作......但退后一步有时会产生奇迹;)(我之前写了另一条评论,之前我删除了......) – 2011-05-10 08:41:34