Javascript 如何隐藏然后恢复到初始状态(=不总是“阻塞”)?

Javascript 如何隐藏然后恢复到初始状态(=不总是“阻塞”)?,javascript,dom,Javascript,Dom,以下是您想要隐藏/显示元素时可以在任何地方找到的JavaScript代码: function sh(_id, _val) { if (document.getElementById) { document.getElementById(_id).style.display = _val; } else { if (document.layers) { document._id.display = _val;

以下是您想要隐藏/显示元素时可以在任何地方找到的JavaScript代码:

function sh(_id, _val) {
    if (document.getElementById) { 
        document.getElementById(_id).style.display = _val;
    }
    else {
        if (document.layers) { 
            document._id.display = _val;
        }
        else { 
            document.all._id.style.display = _val;
        }
    }
}
function hide(_id) {
    sh(_id, 'none');
}
function show(_id) {
    sh(_id, 'block');
}
问题在于“show”功能:它强制执行“
块”
”。如果我使用带有
tr
td
的表,当我想显示它们时,我不希望它们显示为“
”,而是恢复到它们的初始状态

我该怎么办


如何操作?

如果要恢复其默认的
显示值,可以为其指定一个空字符串:

element.style.display = '';

例如,如果您希望通过CSS分配,则必须将其存储在某个位置,例如在
id->display
映射或作为
数据-
属性中。

最简单的方法是使用jQuery和.show()

第二种最简单的方法是将表包装成一个div


如果不是,我会尝试将display的初始值存储在某个地方(如果html5是一个“data-”属性),如果不是在某个其他隐藏元素中,如果您练习的目的是了解更多关于DOM的信息,那么您可以忽略这个答案。但如果重点是让一些UI正常工作,那么:

我的建议是使用jquery。如果您这样做了,您显示的所有代码将完全消失,并且您将隐藏/显示如下元素:

$('#' + id).hide()
$('#' + id).show()

如果您想继续使用低级DOM api,那么必须保存style.display的先前值(block或其他值),以便以后恢复。你可以做到。但是,考虑到各种情况,如果有人已经编写了这样的代码,并且他们正在免费提供,您将不得不继续编写这样的代码。

如果您想要默认的
显示值,您可以为其分配一个空字符串。例如,如果您想要通过CSS分配的,您必须将其存储在某处(例如,在
id->display
map中)。@FelixKling您说得对!请将您的评论作为答案发布,我会检查;)正确的方法是使用CSS类来隐藏/显示。“隐藏”类将隐藏该元素,然后删除该类将还原该元素。感谢您的回答,但我希望避免使用jQuery,因为我的网站必须尽可能轻。感谢您的回答,但我希望避免使用jQuery,因为我的网站必须尽可能轻。
var previousDisplay = {};
function sh(_id, _val) {
    if (document.getElementById) { 
        document.getElementById(_id).style.display = _val;
    }
    else {

        if (document.layers) { 
if(!previousDisplay[_id]){
          previousDisplay[_id] = document._id.display;
        }
            document._id.display = _val;
        }
        else { 
if(!previousDisplay[_id]){
          previousDisplay[_id] = document.all._id.style.display;
        }
            document.all._id.style.display = _val;
        }
    }
}
function hide(_id) {
    sh(_id, 'none');
}
function show(_id) {
    var style = previousDisplay[_id];
    if(!style){
     style = 'block';
    }
    sh(_id, style );
}