2009-04-28 103 views
3

我想制定一个选择器来选择一组可见元素。我们的应用程序使用原型JavaScript框架,版本1.6.0.3。PrototypeJS:选择可见元素

我正在使用的标记如下:

<ul> 
    <li style="display:none;">1 Hidden</li> 
    <li style="display:none;">2 Hidden</li> 
    <li style="">3 Visible</li> 
    <li style="display:none;">4 Hidden</li> 
    <li style="display:none;">5 Hidden</li> 
    <li style="display:none;">6 Hidden</li> 
    <li>7 Visible</li> 
    <li style="">8 Visible</li> 
</ul> 

正如你可以看到,一些元素可能有一个样式属性,但只有那些隐藏包含字符串“显示:无; ”。我需要选择可见的<li>元素,其中可见性定义为“不包含display:none”。

我已经试过远:

var visibleItems = $$('li[style*="display:none"]'); // Yields: [ ] 
var visibleItems = $$('li[style*="display"]'); // Yields: [li, li, li, li, li], but isn't specific enough 

想法?理想情况下,我希望这个尽可能的紧凑,但我会尽我所能。

是的,我知道jQuery can do this但我不想在此应用程序中引入另一个框架,因为它的大部分已经取决于Prototype。

回答

10

您可以使用findAll功能过滤项目:

var notVisible = $$('li').findAll(function(el) { return !el.visible(); }); 
+1

干得漂亮。感谢您的建议! – 2009-04-28 05:54:45