一个关于 jQueryeach()
函数的快速问题;
当我使用each()
时,通常是因为我想影响除一个之外的所有元素。例如:
$("a.aboutMenu").each(function () {
$(this).css("color","#FFF");
});
$(this).css("color","#111");
有没有更好的速写方法?我意识到我可以if
在each
函数中添加一个,但必须有某种写法“each
除了$(this)
”?
在这种情况下,您甚至不需要each
,但通常您可以使用 排除this
选择器not()
,并在同一步骤中应用它的 CSS:
$("a.aboutMenu").not($(this).css('color', '#111')).each(function() {
$(this).css("color", "#FFF");
});
这是可行的,因为css()
作为 setter 使用会返回原始的 jQuery 对象,它非常适合作为参数not()
。
如果您在 jQuery API 上看到,则完全一样。
在您的示例中,您是在说:对于每个 a.aboutMenu 将 css 颜色更改为白色。
你也可以写:
$.each('a.aboutMenu', function() { $(this).css("color","#FFF");} });
如果你需要一个控件,只需if
在你的函数中添加一个。
编辑:
要仅删除this
元素,您可以编写:
$('.aboutMenu').not(this).css('color', '#FFF');
或更好:
$('.aboutMenu').not(this).addClass('whiteColor');
好吧,您可以执行以下操作:
$("a.aboutMenu").not( $(this) ).each(function () {
$(this).css("color","#FFF");
});
$(this).css("color","#111");
你可以这样做:
$("a.aboutMenu").css("color","#FFF");
$(this).css("color","#111");
作为典型.each()
方法的替代方法,在某些情况下使用.siblings()
效果更好。特别是在您想要定位除一个特定元素之外的所有内容的情况下。
例如:
$('a.aboutMenu').on('click', function() {
// the initiating element..
this.css('color','#ddd');
// all anchor siblings..
this.siblings('a').css('color','#fff');
// the initiating element and all '.menu' siblings..
this.css('color','#ddd').siblings('a.menu').css('color','#fff');
});
当然,这是一个简单的示例,它不适合不会(或不应该)更新的元素,但关键是您可以从单个入口点(单击的元素、当前活动的元素等)开始工作..) 然后对它的所有兄弟姐妹进行修改。
也许有点超出这个问题的范围,但这甚至可以使用一些创造性的选择器命名来扩展。请记住,两者都$('.menu-about')
将$('[class=|"menu"]')
匹配一个类选择器,例如“menu-about”(有关详细信息,请参阅此内容),您可以创建一个单一的、小型的、易于重用的样式更新函数,它几乎可以满足任何菜单布局。