jquery的show / hide功能如何工作?

时间:2012-01-23 10:26:06

标签: javascript jquery show-hide

我对切换可见性函数有一些问题,该函数对元素的hidden属性进行操作。麻烦的是,这缺乏浏览器兼容性。

function hide(e) {$(e).hidden=true;}    
function show(e) {$(e).hidden=false;}

谷歌搜索这个问题我遇到了切换style.display属性的方法,就像这样..

function toggle(e) {
document.getElementById(e).style.display = (document.getElementById(e).style.display == "none") ? "block" : "none";
}

..但这似乎不是最佳的,因为您不能拥有将显示属性设置为block的通用显示/隐藏功能。如果有问题的元素有时应该有inline或其他什么呢?

例如jQuery如何解决这个问题?

1 个答案:

答案 0 :(得分:16)

它将旧display值存储在名为data的{​​{1}}属性中,然后在再次显示该元素时使用该值恢复该值。 See the implementation here。您可以检查该站点上任何jQuery方法的实现。

在以下代码段中,我使用olddisplay注释注释了重要的一行。

//LOOK HERE方法的重要部分:

show

hiding an element首先将当前for (i = 0; i < j; i++) { elem = this[i]; if (elem.style) { display = elem.style.display; if (display === "" || display === "none") { elem.style.display = jQuery._data(elem, "olddisplay") || ""; //LOOK HERE } } } 值存储在display属性中时:

data

然后只需将for (var i = 0, j = this.length; i < j; i++) { if (this[i].style) { var display = jQuery.css(this[i], "display"); if (display !== "none" && !jQuery._data(this[i], "olddisplay")) { jQuery._data(this[i], "olddisplay", display); //LOOK HERE } } } 属性设置为display即可。重要的部分:

none

注意

上面的代码来自jQuery版本1.6.2,显然在以后的版本中会有变化。