2012-03-08 52 views
284

在jQuery中,有.hide().show()方法設置CSS display: none設置。相當於jQuery .hide()設置可見性:隱藏

是否有等效功能可以設置visibility: hidden設置?

我知道我可以使用.css()但我更喜歡.hide()左右的一些功能。謝謝。

+2

您可以實現自己的基於在'.toggle()'上 – zerkms 2012-03-08 08:19:11

+0

我也是jQuery的toggleClass()方法的粉絲:) http://jqueryui.com/toggleClass/隨意查看我在下面的答案中共享的示例http://stackoverflow.com/a/ 14632687/1056713 – 2017-05-04 21:41:00

回答

364

你可以製作自己的插件。

jQuery.fn.visible = function() { 
    return this.css('visibility', 'visible'); 
}; 

jQuery.fn.invisible = function() { 
    return this.css('visibility', 'hidden'); 
}; 

jQuery.fn.visibilityToggle = function() { 
    return this.css('visibility', function(i, visibility) { 
     return (visibility == 'visible') ? 'hidden' : 'visible'; 
    }); 
}; 

如果你想重載原來的jQuery toggle(),我不建議...

!(function($) { 
    var toggle = $.fn.toggle; 
    $.fn.toggle = function() { 
     var args = $.makeArray(arguments), 
      lastArg = args.pop(); 

     if (lastArg == 'visibility') { 
      return this.visibilityToggle(); 
     } 

     return toggle.apply(this, arguments); 
    }; 
})(jQuery); 

jsFiddle

+1

亞歷克斯,謝謝。你可以使用'.toggle()'函數嗎? – TMS 2012-03-08 08:47:54

+0

@Tomas你必須隱藏'toggle()',這可能會破壞其他腳本。如果你想,你可以在'toggle()'中加入一個額外的參數來指定'visibility'還是'display'應該被切換。不過,我只是在最後一個例子中使用自定義的。 :) – alex 2012-03-08 08:49:13

+0

你可以發表一個關於如何支持'show'(速度,緩動,回調)的附加參數的例子嗎? – georg 2012-03-08 08:57:36

89

沒有一個內置的,但你可以編寫自己很容易:

(function($) { 
    $.fn.invisible = function() { 
     return this.each(function() { 
      $(this).css("visibility", "hidden"); 
     }); 
    }; 
    $.fn.visible = function() { 
     return this.each(function() { 
      $(this).css("visibility", "visible"); 
     }); 
    }; 
}(jQuery)); 

然後,您可以調用這個像這樣:

$("#someElem").invisible(); 
$("#someOther").visible(); 

這裏有一個working example

+16

+1您不需要'.each':http://jsfiddle.net/nGhjQ/2/。 – pimvdb 2012-03-08 08:28:00

+1

好點,只是一種習慣的力量。謝謝。 +1給alex的回答! – 2012-03-08 08:29:24

+0

只是好奇,包裝這兩個函數在'(函數($){...}(jQuery));包裝?我從來沒有在jQuery中定義自己的函數,我一直只是直接在JavaScript中定義函數。 – VoidKing 2013-05-14 13:24:06

19

如果您只需要隱藏標準功能,只隱藏可見性:隱藏以保持當前佈局,您可以使用隱藏的回調函數來更改標籤中的CSS。 Hide docs in jquery

一個例子:

$('#subs_selection_box').fadeOut('slow', function() { 
     $(this).css({"visibility":"hidden"}); 
     $(this).css({"display":"block"}); 
}); 

這將使用普通的酷動畫隱藏DIV,但動畫結束後,你設置的知名度,隱藏和顯示阻攔。

一個例子:http://jsfiddle.net/bTkKG/1/

我知道你沒有想要的$(「#AA」),CSS()的解決方案,但你並沒有規定這是因爲只使用CSS()方法,你失去了動畫。

48

一個更簡單的方法,這樣做是爲了使用jQuery的toggleClass()方法

CSS

.newClass{visibility: hidden} 

HTML

<a href="#" class=trigger>Trigger Element </a> 
<div class="hidden_element">Some Content</div> 

JS

$(document).ready(function(){ 
    $(".trigger").click(function(){ 
     $(".hidden_element").toggleClass("newClass"); 
    }); 
}); 
+1

我喜歡這種方法。它不那麼自包含,因爲它需要單獨的樣式表,但它有助於將樣式表中的所有樣式信息保留在它應該屬於的位置。如果你想禁用可見性,你可以在一個地方改變一個css標籤,而不是改變你所有的js代碼。 – vaughan 2014-02-09 04:31:20

+17

對於那些使用引導,這個類被稱爲不可見。 – user239558 2014-09-23 20:54:31

相關問題