为什么这个基于属性的选择器在jQuery中出错?

时间:2015-12-26 09:42:03

标签: javascript jquery

alert($("div#keylist ul li").filter("[display=block]").first().position().top);

我有一个id为密钥列表的div,其中有一个无序列表。我想要.position()。第一个可见元素的顶部。

2 个答案:

答案 0 :(得分:4)

Actualy [display=block]不是正确的选择器

使用:可见选择器

alert($("div#keylist ul li:visible").first().position().top);

我认为这就是你需要的

alert($('ul > li').filter(function(){
  return $(this).css('display') == 'block';
}).first().text());

Demo

答案 1 :(得分:0)

如上所述,之前的答案[display=block]不是选择器。但是,如果您仍然坚持选择具有此css属性的li元素,则可以按类

进行

以下几种方法可以实现相同的

// Using Filter
alert("Using Filter " +$("div#keylist ul li").filter(".blockDec").first().position().top);

由于您已将父级设为div#keylist,因此您可以使用find()而不是使用filter()

Herefilter & find

之间的差异

你也可以看看Here& Here优化选择器

//Using find .Here it will find all child element of ul
alert("Using Find " +$("div#keylist ul").find(".blockDec").first().position().top);

//Optimizing the jQuery selector 
alert("Optimized " +$("#keylist").find(".blockDec:first").position().top);

JSFIDDLE