本文またはコンテナ要素を非表示にすることでこれを修正するとします。それはうまくいきません。その理由は次のとおりです。
ドキュメントが (ほとんど) ロードされた後、ドキュメントを非表示にする前に何が起こるでしょうか?
そうです、最善を尽くしてもその間にドキュメントが表示される場合があります。
body
代わりにできることは、JavaScript の介入なしで、たとえば を非表示にする CSS クラスを使用することです。例えば:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<style>
body.hide { display: none; }
</style>
<script src="//code.jquery.com/jquery-1.9.1.js"></script>
<script>
$(document).ready( function() {
$('.foo').each(function( i, elem ) {
$(elem).text( 'So long and thanks for all the fish' );
});
$('body').removeClass( 'hide' );
});
</script>
</head>
<body class="hide">
<div class="foo"></div>
</body>
</html>
もちろんこれは、JavaScript が無効になっている場合、ドキュメントがまったく表示されないことを意味します。JavaScript 以外のフォールバックが必要な場合はどうすればよいでしょうか? その場合、代わりにこのようにすることができます。html
の代わりに要素を非表示にします。body
これは、コードが で機能することがわかっているためですhead
(body
要素はこの時点ではまだ存在しない可能性があります)。JavaScript が有効になっている場合にのみ非表示にします。
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<style>
html.hide { display: none; }
</style>
<script src="//code.jquery.com/jquery-1.9.1.js"></script>
<script>
$('html').addClass( 'hide' );
$(document).ready( function() {
$('.foo').each(function( i, elem ) {
$(elem).text( 'So long and thanks for all the fish' );
});
$('html').removeClass( 'hide' );
});
</script>
</head>
<body>
<div class="foo">
This content is displayed if JavaScript is disabled.
</div>
</body>
</html>
hide
これで JavaScript 以外のフォールバックができましたが、クラスを追加するコードのために、JavaScript が有効になるとドキュメントはすぐに非表示になります。
また、コールバックでパラメーターが逆になっていることに注意してください$().each()
。(興味深いことに、使用した順序はより理にかなっており、実際に新しいネイティブ.forEach()
関数で使用されている順序です。順序$().each()
は実際には逆になっています。当時は良いアイデアのように見えましたが、実際には単なる間違いでした。 .)