var isVisible = form.style.display != 'none';
更新 #1:hidden
属性
また、hidden
属性が指定されている場合、要素は非表示になる可能性があるため、条件を次のように変更できます。
var isVisible = form.style.display != 'none' && !form.hasAttribute('hidden');
更新 #2: jQuery アプローチ:
すべての見えないフォームを見つける:
$('form:hidden');
また
$('form:not(:visible)');
表示されているすべてのフォームを検索します。
$('form:visible');
フォームが表示されていることを確認します:
$(form).is(':visible');
更新 #3: 特定のケース (問題の元のコードの場合)
私のデモの関数を使用して、目に見えるフォームを決定するのはかなりうまくいっています:
function isVisible(el) {
return el.style.display != 'none' && !el.hidden;
}
var formElement = [];
for (i=0, l=document.forms.length; i<l; i++) {
var formIndex = document.forms.item(i);
if(isVisible(formIndex)) {
formElement.push(formIndex);
}
}
console.log(formElement);
これは、デモのループと同じです。
for(var i = document.forms.length; 0 < i--;) {
log('Form #' + i + ': ' + isVisible(document.forms[i]));
}
デモ
更新 #4: ポップアップ ウィンドウ
例をポップアップ ウィンドウに適用しましたが、他のホストからのドキュメント内の要素を処理できないと言わざるを得ません。ポップアップ ウィンドウとオープナー ウィンドウの両方が同じホストに属している必要があります。
<script type="text/javascript">
var wnd = window.open('popup.html');
function isVisible(el) {
return el.style.display != 'none' && !el.hidden;
}
wnd.onload = function() {
/* This is working pretty well: */
var formElement = [];
console.log(wnd.document.forms);
for (i=0,l=wnd.document.forms.length;i<l;i++){
var formIndex = wnd.document.forms.item(i);
console.log(formIndex);
if (isVisible(formIndex)){
formElement.push(formIndex);
console.log('Form ' + formIndex.id + ' is visible');
}
}
};
</script>