![](/img/trans.png)
[英]What's the best way to access the DOM ref immediately after the element is being toggled on?
[英]What's the best way to test an element in the DOM
有幾種方法可以做到這一點(我知道)。
測試css顯示
if ($('#foo').css('display') == 'none')
測試可見性
if ($('#foo').is(':visible'))
在可見性中,我可以檢查元素是否存在。
如果元素占用文檔中的空間,則認為元素是可見的。 可見元素的寬度或高度大於零。
具有可見性的元素:隱藏或不透明度:0被認為是可見的,因為它們仍然占用布局中的空間。
但是,請注意,我無法測試可見性(由用戶),因為:
隱藏元素可以通過將display屬性設置為“none”或將visibility屬性設置為“hidden”來完成。 但請注意,這兩種方法會產生不同的結果:
visibility: hidden隱藏了一個元素,但它仍然會占用與之前相同的空間。 該元素將被隱藏,但仍會影響布局。
display: none隱藏一個元素,它不會占用任何空間。 元素將被隱藏,頁面將顯示為元素不存在:
因此,在這兩個示例中,我都測試元素是否在用戶的所有意義上都可見。
所以我的問題是:
我是否應該使用以下內容:
if ($('#foo').is(':visible') &&
$('#foo').css('opacity') > 0 &&
$('#foo').css('visibility') != 'hidden')
我認為你最好的辦法是實現下面的自定義功能,並在新事物出現時進行測試/改進,
$.fn.isReallyVisible = function () { //rename function name as you like..
return (this.css('display') != 'none' &&
this.css('visibility') != 'hidden' &&
this.css('opacity') > 0);
}
以上應該是跨瀏覽器證明,因為我們使用jQuery .css
函數(特別是對於不透明度)。
兩者之間的區別在於,使用“visible”屬性隱藏會在頁面上留下元素,而不會實際顯示。 因此,當頁面呈現顯示的其余部分時,將考慮間距。
似乎以另一種方式執行它實際上會阻止元素被放到頁面上,這可以改變頁面上其他元素的布局方式。
通常測試可見部分就足夠了我的經驗,但是如果你想要更完整,那么是的,你必須檢查多個屬性上的“&&”條件。 它實際上取決於您使用的代碼是多么干凈,以及系統的其他UI方面的測試結果如何。
另一件需要考慮的是測試的目的是什么。 您是在測試您編寫的代碼,還是瀏覽器如何使用Javascript來呈現頁面? 您希望測試您正在創建的代碼,並依賴於瀏覽器的工作原理(因為如果瀏覽器停止工作,那么整個事情都是不可靠的)。 因此,如果您的代碼告訴元素設置某個屬性,那么檢查該屬性就是您需要做的所有測試。 除此之外的任何事情都只能通過在代碼本身之外進行測試來證明(就像在手工查看頁面和其他類似的事情一樣)。
如果你想查看DOM中是否存在元素,你可以這樣做:
$.fn.exists = function () {
return this.length > 0;
}
用法:
$('#myid').exists();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.