晚上!
对于我的基本 JavaScript 库,我对如何获取和设置绝对的 DEFAULT CSS 属性感到有些困惑——就像在 jQuery 中一样。
例如,在查看 jQuery 源代码后,我可以看到对于show()、hide()和toggle()方法,有一个函数showHide()(底部的片段)可以访问一个方法调用“._data”来检索元素的“旧显示”。
我只知道window.getComputedStyle,它会在元素应用了样式时发生变化。如果 <div> 的原始样式是“display:none”,那么当“display:none”是 CSS 最古老的记录时,你怎么能得到旧的显示呢?
“级联规则”是那些原始样式吗?
代码中还有一个名为css_defaultDisplay()的函数,它与 iframe 有关吗?有没有更简单的方法来完成这一切?
谢谢大家的回复。
编辑:难道我不能从我想要获取样式的元素的 tagName 中创建一个新元素并获取 IT 的计算样式吗?
来自 jQuery 1.10.2 源代码的代码片段:
function showHide( elements, show ) {
var display, elem, hidden,
values = [],
index = 0,
length = elements.length;
for ( ; index < length; index++ ) {
elem = elements[ index ];
if ( !elem.style ) {
continue;
}
values[ index ] = jQuery._data( elem, "olddisplay" );
display = elem.style.display;
if ( show ) {
// Reset the inline display of this element to learn if it is
// being hidden by cascaded rules or not
if ( !values[ index ] && display === "none" ) {
elem.style.display = "";
}
// Set elements which have been overridden with display: none
// in a stylesheet to whatever the default browser style is
// for such an element
if ( elem.style.display === "" && isHidden( elem ) ) {
values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
}
} else {
if ( !values[ index ] ) {
hidden = isHidden( elem );
if ( display && display !== "none" || !hidden ) {
jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
}
}
}
}
// Set the display of most of the elements in a second loop
// to avoid the constant reflow
for ( index = 0; index < length; index++ ) {
elem = elements[ index ];
if ( !elem.style ) {
continue;
}
if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
elem.style.display = show ? values[ index ] || "" : "none";
}
}
return elements;
}