2009-04-28 8 views
3

J'essaye de formuler un sélecteur pour sélectionner un ensemble d'éléments visibles. Notre application utilise le framework JavaScript Prototype, version 1.6.0.3.PrototypeJS: Sélection des éléments visibles

Le balisage je travaille est comme suit:

<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> 

Comme vous pouvez le voir, certains éléments peut avoir un attribut de style, mais seulement ceux qui sont cachés contiennent la chaîne « display: none; ". Je dois sélectionner les éléments <li> qui sont visibles, où la visibilité est définie comme "ne contient pas display: none".

Ce que j'ai essayé de loin:

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

Idées? Idéalement, je voudrais que ce soit aussi compact que possible, mais je vais prendre ce que je peux obtenir.

Oui, je sais que jQuery can do this mais je ne veux pas introduire un autre cadre dans cette application, car beaucoup de choses dépendent déjà de Prototype.

Répondre

10

Vous pouvez filtrer les éléments en utilisant la fonction findAll:

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

bien fait. Merci pour la suggestion! –

+0

De rien! – CMS

+3

J'ai la même question, et cette réponse ne fonctionnera pas si les éléments ont été cachés par CSS. Dans ce cas, la fonction les renvoie comme visibles. Je cherche toujours et réponds ... – Lennon

Questions connexes