2016-08-14 5 views
1

Ich arbeite an der Umwandlung eines JQuery-Projekts in reines JavaScript und ich bin mit dem folgenden Bit des Codes fest.Suche nur sichtbare Elemente mit JavaScript

$(".element-has-class:visible") 

Ich dachte, vielleicht etwas in dieser Richtung könnte das gesamte sichtbare Element zu fangen arbeiten (im Falle meiner Projektliste Artikel), aber ich habe kein Glück gehabt:

function functionName(){ 
    var elementsOnShow = document.getElementsByClassName('element-has-class').find(isVisible); 
} 

function isVisible(element) { 
    return element.style.display === 'block'; 
} 

(block hat in der CSS einstellen). Gibt es überhaupt irgendwelche sichtbaren Elemente innerhalb einer Variablen?

+0

Und Sie erhalten keine Fehler, zum Beispiel "' NodeList.find' ist keine Funktion "oder etwas ähnliches – adeneo

+1

Check [THIS] (http://stackoverflow.com/questions/19669786/check-if- element-is-visible-in-dom) – Abhi

Antwort

4

Sie können Ihre nodeList einem Array (read more about it here), die Sie Array.prototype.filter() erhalten die sichtbaren Elemente zu verwenden, ermöglicht es konvertieren:

function functionName(){ 
    var myNodeList = document.getElementsByClassName('element-has-class'), 
     myArray = [].slice.call(myNodeList), 
     elementsOnShow = myArray.filter(isVisible); 
} 

function isVisible(element) { 
    return element.offsetWidth > 0 
     || element.offsetHeight > 0 
     || element.getClientRects().length > 0; 
} 

Die isVisible Funktion sehen Sie oben von jQuery 2.2.4 der Quelle extrahiert Code (Version 3.XX ist nicht kompatibel mit IE 8 und darunter).

+0

Ich möchte hinzufügen, dass, wenn der Stil über Klassen festgelegt wurde, 'getComputedStyle(). display' verwendet, um auch diese zu berücksichtigen. – Matthijs

+1

Gemäß https: //api.jquery .com/visible-selector/- 'Elemente werden als sichtbar betrachtet, wenn sie Speicherplatz im Dokument belegen. Sichtbare Elemente haben eine Breite oder Höhe, die größer als Null ist. Ich glaube also nicht, dass das Überprüfen des Anzeigeblocks das genaue Verhalten wie folgt liefert: sichtbar –

+0

@JithuPRajan Okay, ich habe es in jQuerys Quellcode gefunden. Siehe Änderungen – blex

Verwandte Themen