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>