將上述溶液迎合這種 「隱形」 場景:
display:none;
但它不適合這個:
visibility: hidden;
爲了包括可見性測試:hidden;該腳本可以作如下修改......
首先,創建一個跨瀏覽器兼容的功能,以獲得所需元素的計算樣式:
computedStyle = function(vElement) {
return window.getComputedStyle?
?window.getComputedStyle(vElement,null)
:vElement.currentStyle; //IE 8 and less
}
其次,創建函數測試知名度
isVisible = function(vElement) {
return !(vElement.offsetWidth == 0 && vElement.offsetHeight == 0)
&& computedStyle(vElement).visibility != "hidden";
}
最後,簡單地引用ISVISIBLE功能需要的地方如下:
if (isVisible(myElement)) {
alert('You can see me!');
} else {
alert('I am invisible ha ha!');
}
只需注意當前的isVisible()測試不適合許多「不可見」場景(但是我認爲可以通過增強測試來包含這些測試)。下面是一些例子:
- 其中元素是相同的顏色與周圍顏色
- 其中元素是可見的,但物理上落後另一個元件例如。不同的z-index值
這可能也是值得一提的關於上述computedStyle下列()函數:
- 它當然可以用於許多其它風格有關的目的除了測試知名度
- 我選擇忽略:由於補丁瀏覽器支持而導致的僞類型測試,但是如果需要,可以對函數進行較小的修改。
不需要遍歷時纔會起作用,我只需要檢查父項是否會影響計算結果風格,因此電腦風格足以讓我... 謝謝您的回答,它幫助了很多, 這裏是我最後使用的代碼: 功能ISVISIBLE(ELEM) { 如果(elem.currentStyle) // ie only { return elem.currentStyle [「display」]!='none'; } 其他 {0}查詢方式計算是不可見的。 return(elem.offsetWidth> 0 || elem.offsetHeight> 0); } } 但是,我需要做更多的測試,看看「||」是足夠的,或者我需要有「&&」而不是.. – Haytham
jQuery/Sizzle 1.3.2鏈接已損壞,您現在可以[在此處找到](https://github.com/jquery/jquery/blob/1.3 0.2/SRC/selector.js#L961)。 –
在編寫當前jQuery使用的解決方案時,可以在[這裏]找到固定的缺陷(https://github.com/csnover/jquery/commit/0229b83f7e5bf64edb2888ab349bedcd1a45e7c1#L0L281)。進一步討論[這裏](http://bugs.jquery.com/ticket/4512)。 –