2

一个关于 jQueryeach()函数的快速问题;

当我使用each()时,通常是因为我想影响除一个之外的所有元素。例如:

$("a.aboutMenu").each(function () {
    $(this).css("color","#FFF");
});

$(this).css("color","#111");

有没有更好的速写方法?我意识到我可以ifeach函数中添加一个,但必须有某种写法“each除了$(this)”?

4

5 回答 5

6

在这种情况下,您甚至不需要each,但通常您可以使用 排除this选择器not(),并在同一步骤中应用它的 CSS:

$("a.aboutMenu").not($(this).css('color', '#111')).each(function() {
    $(this).css("color", "#FFF");
});​

这是可行的,因为css()作为 setter 使用会返回原始的 jQuery 对象,它非常适合作为参数not()

于 2012-12-12T11:34:33.377 回答
3

如果您在 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');
于 2012-12-12T11:35:50.600 回答
2

好吧,您可以执行以下操作:

$("a.aboutMenu").not( $(this) ).each(function () {
     $(this).css("color","#FFF");
});
$(this).css("color","#111");
于 2012-12-12T11:37:30.990 回答
1

你可以这样做:

$("a.aboutMenu").css("color","#FFF");
$(this).css("color","#111");
于 2012-12-12T11:34:33.780 回答
0

作为典型.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”(有关详细信息,请参阅内容),您可以创建一个单一的、小型的、易于重用的样式更新函数,它几乎可以满足任何菜单布局。

于 2014-09-05T09:06:17.977 回答