我正在尝试创建两个子div,其中任何一个单击时都会给“toggler”类子div提供一个“highlight”类。我正在创建一个“toggler”选择器变量,它包含“toggler”类。但是,给定以下代码,两个子div都被赋予“highlight”类,而不仅仅是选择器变量设置为保持的“toggler”类。
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更改为以下结果会产生所需的结果:
$(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/
为什么前一种情况下的Children方法选择两个子项而不仅仅选择“toggler”选择器变量中定义的子项?
答案 0 :(得分:1)
children()函数接受一个选择器:
http://api.jquery.com/children/
.children([选择器])
返回: jQuery
说明:让孩子们 匹配元素集中的每个元素的数据,可选地由 选择器。
selector:一个字符串,其中包含一个匹配元素的选择器表达式。
在第一种情况下(错误的一种情况),你传递的是一个失败的对象:
var toggler = $('.toggler');
在第二种情况下,你只传递选择器('.toggler'),这就是它按预期工作的原因。
答案 1 :(得分:0)
因为.children()
方法只接受字符串选择器来过滤..而不是元素。
<强>引用强>
.children( [selector ] )
的选择强>
键入:选择器
包含选择器 表达式的 字符串,用于匹配元素。
您尝试实现的目标可以通过.filter()
( 接受元素或jQuery对象作为参数)完成,但仍然没有意义在这种情况下..
thisParent.children().filter(toggler).toggleClass('highlight');
答案 2 :(得分:0)
因为.children()
只接受selector
而不接受jquery对象