如何在渲染之前使用jQuery隐藏元素?

And*_*rko 44 html jquery hidden

我想生成具有可以有条件地显示/隐藏的区域(div,spans)的html布局.默认情况下隐藏这些区域.

如果我在document.ready上使用jquery调用.hide()方法,这些区域可能会闪烁(浏览器呈现部分加载的文档).所以我在html布局中应用"display:none"样式.

我想知道避免眨眼的最佳做法是什么,因为应用"display:none"打破了封装规则 - 我知道jquery用hide/show做什么并使用它.如果jquery的隐藏/显示实现有一天会改变,我会让整个网站变得不可行.

先感谢您

Mar*_*rko 33

@安德鲁,

我知道答案已经被接受,但使用display: none;将是一个恶梦没有JavaScript的用户.

使用内联Javascript,您可以隐藏元素,而不会闪烁.没有Javascript的用户仍然可以看到它.

考虑一些在页面加载时应该隐藏的div.

<head>
    <script type="text/javascript" src="jQuery.js"></script>
</head>
<body>
    <div id="hide-me">
        ... some content ...
    </div>
    <script type="text/javascript">
        $("#hide-me").hide();
    </script>

    <div id="hide-me-too">
        ... some content ...
    </div>
    <script type="text/javascript">
        $("#hide-me-too").hide();
    </script>
</body>
Run Code Online (Sandbox Code Playgroud)

该联JavaScript将尽快元素呈现运行,从而从用户隐藏它.

  • 这将起作用<u>不闪烁</ u>(在所有浏览器中,对于任何页面)简直是不真实的...不同的浏览器,取决于它们的确切实现和页面大小,可能最终"闪烁"或甚至显示内容一段时间.在Chrome中显示一段时间的EG样本(1 MB):http://www.architectshack.com/as/BlinkTest.ashx?2 (13认同)

Rya*_*Ore 6

我同意BorisGuéry的观点,即它不是过度工程,而是标准的最佳实践.我会采用与Boris稍微不同的方式,首先在html中添加一个no-js类,然后用JavaScript删除它.

这样您就不会等待文档准备好隐藏内容,而且没有任何JavaScript,您仍然可以看到内容.假设用户没有JavaScript更符合渐进增强的理念.

例如:

<html class="no-js">
<body>
<div id="foo"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我的css:

#foo {
    display: none;
}
html.no-js #foo {
    display: block;
}
Run Code Online (Sandbox Code Playgroud)

和javascript

$(document).ready(
   function()
   {
     $('html').removeClass('no-js');
   }
);
Run Code Online (Sandbox Code Playgroud)

*********或每个案例***********

例如:

<div class="no-js" id="foo">foobar and stuff</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

.no-js {
  display:none;
}
#foo {
  display: block;
}
#foo.no-js {
  display: none;
}
Run Code Online (Sandbox Code Playgroud)

JS:

$(document).ready(function(){
  // remove the class from any element that has it.
  $('.no-js').removeClass('no-js');
});
Run Code Online (Sandbox Code Playgroud)


Jam*_*s H 3

设置元素的初始显示属性绝对没有任何问题,特别是如果将其封装在 css 类中。

  • 如果你这样做,禁用 javascript 的浏览器将永远不会渲染这些元素 (25认同)
  • 永远,永远,永远,永远。这是不好的做法。 (10认同)