2013-05-29 29 views
2

我想创建两个子div,其中任何一个单击时都会给“toggler”类的子div赋予一个“高亮”类。我正在创建一个“触发器”选择器变量,它包含“触发器”类。然而,考虑到下面的代码,这两个子div都被赋予了“highlight”类,而不是仅仅是选择器变量被设置为保存的“toggler”类。jQuery儿童方法返回意外的结果

HTML:

<div class="parent_div"> 
    <div class="first_child"> 
    First Child Text 
    </div> 
    <div class="toggler"> 
    Toggler 
    </div> 
</div> 

CSS:

.parent_div > div { 
    display: inline-block; 
    float: left; 
    clear: both; 
} 

.parent_div > div:hover { 
    cursor: pointer; 
} 

.highlight { 
    background-color: yellow; 
} 

的jQuery:

$(document).ready(function() { 
    var toggler = $('.toggler'); 
    var eitherChild = $('.first_child, .toggler'); 

    eitherChild.click(function() { 
     var thisParent = $(this).parent(); 
     thisParent.children(toggler).toggleClass('highlight'); 
    }); 
}); 

小提琴来显示结果:http://jsfiddle.net/bronzegate/5yTBP/

改变了jQuery的followi NG产生期望的结果:

$(document).ready(function() { 
    var eitherChild = $('.first_child, .toggler'); 

    eitherChild.click(function() { 
     var thisParent = $(this).parent(); 
     thisParent.children('.toggler').toggleClass('highlight'); 
    }); 
}); 

小提琴来显示结果:http://jsfiddle.net/bronzegate/ZS8P5/

为什么儿童方法在前者的情况下选择这两个孩子,而不是只在中定义的孩子“触发器“选择器变量?

回答

1

孩子()函数接受一个选择器:

http://api.jquery.com/children/

。儿童([选择器])

返回: jQuery的

描述:获取孩子在匹配的元素集合中的每个元素,任选地被 选择器过滤的 。

选择器:包含选择器表达式以匹配元素的字符串。

在第一种情况下(错了),你传递一个对象,这将失败:

var toggler = $('.toggler'); 

在第二种情况下,你只是路过的选择(“.toggler” ),这就是为什么它按预期工作。

0

因为.children()方法只接受用于筛选的字符串选择器。不是元素。

报价

.children([selector ])
选择
类型:选择
含有选择表达用于匹配元素甲字符串。


你努力实现可以用做什么.filter()接受元素或jQuery对象作为参数),但它仍然使得在这种情况下没有意义..

thisParent.children().filter(toggler).toggleClass('highlight');