2016-08-14 11 views
1

JQueryプロジェクトを純粋なJavaScriptに変換する作業をしていますが、次のコードを使用しています。 blockがされている(JavaScriptを使用して可視要素のみを検索する

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

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

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

は、私は、おそらくこれらの線に沿って何かが(私のプロジェクトのリスト項目の場合)すべての可視要素をキャッチするために働くかもしれないが、私は運がなかったてきたと思いましたCSSで設定します)。 1つの変数内にすべての可視要素を取得するための方法はありますか?

+0

"NodeList.findは関数ではありません"などのエラーは発生していません – adeneo

+1

[THIS]をチェックしてください(http://stackoverflow.com/questions/19669786/check-if-要素を可視化する) – Abhi

答えて

4

あなたが目に見える要素を取得するためにArray.prototype.filter()を使用できるようになりますアレイ(read more about it here)のために、nodelistとを変換することができます:

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

あなたは上記を参照isVisible関数はjQueryの2.2.4のソースから抽出されますコード(バージョン3.XXはIE 8以降と互換性がありません)。

+0

クラスを介してスタイルが設定されている場合は、getComputedStyle()。displayを使用して、それらの要素も考慮に入れてください。 – Matthijs

+1

https://api.jquery .com/visible-selector/- '要素は文書内のスペースを消費する場合に可視と見なされます。可視要素の幅または高さが0より大きい。だから私は表示ブロックをチェックすると正確な動作を提供するとは思わない:visible –

+0

@JithuPRajan申し訳ありません、私はjQueryのソースコードでそれを見つけました。変更点 – blex

関連する問題