循环遍历jquery中的元素集

时间:2009-11-26 07:23:26

标签: jquery iteration css-selectors

$('form td .hint p')此jquery选择器返回一个列表[p,p,p,p,p,p]

我想知道循环每一个的最佳方法是什么,检查他们的css值,并在css值=我想要的东西时做点什么。

我有这个功能来显示和隐藏工具提示,但我只希望一次显示一个工具提示。在做mouseover和mouseout工作的时候,它有问题,因为我正在使用parent(),next()和child()来查找正确的元素,并且jquery瞬间插入一个div环绕我正在显示和隐藏的元素。所以基本上我试图强制所有其他具有display:block的元素在每次鼠标悬停时隐藏。

目前这样做:

target = $('form td .hint p');
target[0].css('display') gives an error.

target.css('display') seems to only return the css of the first one.

1 个答案:

答案 0 :(得分:14)

使用each()

var displays = '';
$("p").each(function(i, val) {
  displays += "Paragraph " + i + ": " + $(this).css("display") + "\n";
});
alert(displays);

失败的原因:

var target = $("p");
var display = target[0].css("display");

target[0] 不是 jQuery对象。你可以这样做:

var display = $(target[0]).css("display");

另外,如果您阅读css()的文档:

  

首先返回一个样式属性   匹配元素。

还有两点值得一提。

首先,我不建议自己做一个工具提示。获取众多插件之一。我之前使用过this one并完成了这项工作。

其次,如果您正在检查CSS显示值,可能有一个值得使用的快捷方式。例如,你可以这样做:

$("p").each(function() {
  if ($(this).css("display") == "none") {
    $(this).addClass("blah");
  }
});

但你也可以使用:hidden:visible选择器,所以:

$("p:hidden").addClass("blah");

检查css()调用的值很大程度上是不可靠的,因为您只检查内联样式而不是样式表值。