最初隐藏一个 div 以供以后显示

Posted

技术标签:

【中文标题】最初隐藏一个 div 以供以后显示【英文标题】:Initially hiding a div for later display 【发布时间】:2012-07-20 04:33:47 【问题描述】:

我的网页如下:

<div id="id1" class="stuff">
TEXT, FORMS, and STUFF
</div>

<div id="id2" class="stuff" style="display:none">
TEXT, FORMS, and STUFF
</div>

<div id="id3" class="stuff" style="display:none">
TEXT, FORMS, and STUFF
</div>

<a id="btn1">DD</a>
<a id="btn2">DD</a>
<a id="btn3">DD</a>

在此之下,我有 jQuery click 事件,它将被点击的项目的显示设置为继承,其他的设置为无。

$("#btn2").click(function (e) 
    $("#id1").css('display','none');
    $("#id3").css('display','none');
    $("#id2").css('display','inherit');
);

显示和隐藏可以正常工作,但是我确实注意到最初隐藏的 div 中的某些内容没有正确渲染,尤其是被 CSS 操作的元素。本质上,当页面加载时,隐藏的 div 没有正确呈现,并且当它们显示时看起来很丑。正确执行此操作的方法是什么?

编辑:::::::::::::::::::::::::::::::::::::::::::::

我最终将所有最初隐藏的 div 设置为“可见性:无”,然后在页面 onLoad() 事件中设置显示:无。当我切换时,我会同时更改可见性和显示。一切都正确呈现,并且由于事物被静态设置为不可见,因此所有 div 都不会显示丑陋的 2 秒。

【问题讨论】:

如何点击未显示的内容? 我认为你必须更具体一点,“丑陋”并不能真正告诉我们问题是什么,通常这应该可以正常工作,但只是做$("#id1, #id3").hide(); 似乎更简单?我猜你对每个元素都有一个函数,而且这个例子只是用隐藏元素上的点击事件写得不好,否则我倾向于同意上面的评论,如何点击隐藏元素?跨度> 对不起。我打错了。有三个按钮。隐藏 div 内的元素未正确呈现。当我最初取消隐藏所有 div 时,一切都呈现正确。 【参考方案1】:

尝试改用visibility。示例:

$("#id2").click(function (e) 
    $("#id1").css('visibility','hidden');
    $("#id3").css('visibility','hidden');
    $("#id2").css('visibility','visible');
);

displayvisibility 都会对浏览器行为产生影响。

另一种解决方法是将要隐藏的 div 的 opacity 设置为 0。根据我的经验,这总是有效的,但不太优雅。


更新回复评论:在这种情况下,您可以将widthheight 等其他属性设置为0px,将over-flow 设置为hidden,以便div 不占用屏幕上的任何空间。丑陋,但基本,并且有效。

<style>
.hidden 
    visibility: hidden;
    overflow: hidden;
    width: 0px;
    height: 0px;

</style>

<div class="hidden"><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Aster_Tataricus.JPG/245px-Aster_Tataricus.JPG"/></div>
<div class="hidden"><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Chamomile%40original_size.jpg/280px-Chamomile%40original_size.jpg"/></div>
<div><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Jonquil_flowers06.jpg/320px-Jonquil_flowers06.jpg"/></div>

您可以使用 jQuery 的 addClassremoveClass 方法使 div 可见和不可见,例如:$("#id1").removeClass("hidden");$("#id3").addClass("hidden");

【讨论】:

我无法使用可见性,因为 div 在技术上仍然存在。 id1 和 id2 占用的空间仍然会偏移 id3,即使它是不可见的。有了可见性,渲染问题就解决了。 Display: none 避免了这种情况,但存在渲染问题。 @user974896 - 在这种情况下,还要设置widthheightover-flow 属性,如上例所示。【参考方案2】:

为什么不使用 jQuery showhide

使用 CSS 在页面加载时隐藏要隐藏的元素(duh):

#id1, #id2, .. 
    display: none;
 

或者你可以用 Javacript 隐藏它:

$('#id1, #id2, ..').hide();

使用以下方法显示或隐藏它们:

$('#btn2').click(function() 
    $('#id1, #id3').hide();
    $('#id2').show();
);

【讨论】:

切换不是问题。它最初是隐藏 div 并在显示后正确呈现所有内容。 隐藏和显示只不过是在元素上设置 CSS 属性的函数。它只需要几行代码就可以完成这项工作。 我明白,但这仍然不能解决原来的问题。我最初将如何隐藏 div?请记住,其中有 2 个是被隐藏起来的。【参考方案3】:

最好不要在标记中添加显示逻辑,这样做的更好方法是

.hidden display:none;

.

<div id="id1" class="stuff">
TEXT, FORMS, and STUFF
</div>

<div id="id2" class="stuff hidden" >
TEXT, FORMS, and STUFF
</div>

<div id="id3" class="stuff hidden">
TEXT, FORMS, and STUFF
</div>

.

$(".stuff").click(function () 
    $(".stuff").addClass('hidden');
    $(this).removeClass('hidden');

);

如果您仍然遇到渲染问题,希望对您有所帮助,然后可以尝试

.hidden visibility:hidden; 
.stuffdisplay:block;

【讨论】:

为什么它更好,以及它与 OP 的代码究竟有何不同。除了使用类来改变 CSS 之外,还是一模一样的? 查看除了渲染之外,最好不要将 stlying 与标记混为一谈。 一切都在 CSS 中。我在这里输入它作为示例,因为我不想在这里转储我的网站。我放在这里的基本上就是我想做的。【参考方案4】:

我喜欢这样: javascript

$('#btn2').click(function()
    $('#id1').addClass('hidden');
    $('#id3').addClass('hidden');
    $('#id2').removeClass('hidden');
);

css:

.hidden 
    display: none;

html:

<div id="id1" class="stuff">
TEXT, FORMS, and STUFF
</div>

<div id="id2" class="stuff hidden">
TEXT, FORMS, and STUFF
</div>

<div id="id3" class="stuff hidden">
TEXT, FORMS, and STUFF
</div>

<a id="btn1">DD</a>
<a id="btn2">DD</a>
<a id="btn3">DD</a>

【讨论】:

class="hidden" div 中静态隐藏的项目(设置 class="hidden")在切换时无法正确加载所有元素。【参考方案5】:

也许 .toggle 可以帮助您实现这一目标?

$("#btn2").click(function (e)  
    $("#id1").toggle(); 
    $("#id2").toggle();
    $("#id3").toggle();
);

【讨论】:

切换有效,但我最初如何隐藏 div 以便它们正确加载。 @user974896 $(document).ready(function() $("#id1").hide(); $("#id2").hide(); $("#id3 ").hide(); ); 在页面底部的 JS 加载之前,不是所有的 div 都会短暂显示几秒钟吗?我在我的 onLoad 事件中为 body 设置了相同的逻辑(尽管我正在切换 display=none)。所有的 div 都显示了一两秒钟。我在编辑中的解决方案(从没有可见性开始)解决了这个问题。 @user974896 可以改用 z-index css 样式 - 将其设置在页面后面,然后使用单击功能切换添加命令以将 css z-index 更改为之前的可见状态切换命令。【参考方案6】:
window.onload = pre_loader;

function pre_loader() 

    javascript:document.getElementById('loader').style.visibility='hidden';

    javascript:document.getElementById('loader').style.opacity=0;


【讨论】:

请解释这个答案如何优于 OP 中的答案

以上是关于最初隐藏一个 div 以供以后显示的主要内容,如果未能解决你的问题,请参考以下文章

如何隐藏一个div类下的所有div并在JQuery中显示一个相同类的div?

带有 JQuery 的 Rails 5:带有显示和隐藏 JQuery 切换的表单最初会显示,但在我刷新页面后会隐藏起来

reactjs - 如何隐藏一个div并将其替换为reactjs中的另一个div?

如何处理隐藏 div 内的谷歌地图(更新图片)

单击提交后如何获取选定的单选按钮以显示特定的隐藏 div?

检测 HTML5 视频是不是正在播放或暂停,并相应地显示或隐藏 Div