2009-04-28 8 views
3

Ich versuche, einen Selektor zu formulieren, um eine Reihe von sichtbaren Elementen auszuwählen. Unsere Anwendung verwendet das Prototype JavaScript-Framework, Version 1.6.0.3.PrototypeJS: Auswählen von sichtbaren Elementen

Das Markup ich arbeite mit ist wie folgt:

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

Wie Sie sehen können, einige Elemente kann ein style-Attribut haben, sondern nur die versteckten die Zeichenfolge „Anzeige enthalten: none; ". Ich muss die <li> Elemente auswählen, die sichtbar sind, wobei Sichtbarkeit definiert ist als "enthält keine Anzeige: keine".

Was ich versucht habe zu weit:

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

Ideen? Im Idealfall möchte ich, dass dies so kompakt wie möglich ist, aber ich nehme, was ich bekommen kann.

Ja, ich weiß, dass jQuery can do this, aber ich möchte nicht ein anderes Framework in dieser Anwendung einzuführen, da viel davon bereits von Prototype abhängt.

Antwort

10

Sie können die Elemente filtern, um die findAll Funktion:

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

Gut gemacht. Danke für den Vorschlag! –

+0

Gern geschehen! – CMS

+3

Ich habe die gleiche Frage, und diese Antwort wird nicht funktionieren, wenn die Elemente von CSS ausgeblendet wurden. In diesem Fall gibt die Funktion sie als sichtbar zurück. Ich suche immer noch und antworte ... – Lennon

Verwandte Themen