Javascript 如何隐藏然后恢复到初始状态(=不总是“阻塞”)?
以下是您想要隐藏/显示元素时可以在任何地方找到的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;
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 );
}