开发者

How do i hide html until its processed with javascript?

I am using some JS code to transform my menu into a drilldown menu.

The problem is before it runs the JS you see a BIG UGLY mess of links. On their site its solved by putting the js at the top. Using recommendations by yahoo/YSlow i am keeping the JS files at开发者_运维百科 the bottom.

I tried hiding the menu with display:none then using jquery to .show(), .css('display', ''), .css('display', 'block') and they all lead up to a messsed up looking menu (i get the title but not the title background color or any links of the menu)

How do i properly hide a div/menu and show it after being rendered?


In the <head> place this:

<script>document.documentElement.className = 'js';</script>

Now, it will .js class to your html element. And it will be the very first thing done by the javascript on the page.

In your CSS you can write:

.js #menu { display:none; }

And then:

$(document).ready(function() { 
    $('#menu').css('display','block').fancyMenu();
});

This is an excellent technique, that allows you to make your pages "progressively enhanced", if your user has JavaScript disabled – she will still be able to see the content, and you can also separate non-JS styling with styling, that is relevant only for JS version of your menu, perhaps "position:absolute" and things like that.


At the top of your page put:

<script type="text/javascript">
    document.write('<style type="text/css">');
    document.write('#mylinks { display:none; }');
    document.write('</style>');
</script>

And at the end of your "processing", call $('#mylinks').show();

document.write is evaluated as the DOM is processed, which means this dynamic style block will be registered in the style rules before the page is first displayed in the viewport.

This is a good case where progressive enhancement works really well - if your users have JS available & enabled, you hide the links until they are ready; but if not, they are still available, albeit ugly.


Life will be gentler with you if you try not to make pages that look like "a big ugly mess" without javascript. Have a heart.

Whatever yahoo says, it would probably be worth it for you to insert a little script that adds a style element with a few rules to the head of ypur document, before the body renders.


I found the solution. I should let the links be hidden with css then .show() BEFORE the ddMenu code executes instead of after. The ddMenu seems to check the parents width and sinces its hidden i guess its 0. The time between .show() and ddMenu is fast enough not to show the ugly links (on my machine/browser). The the majority of the time (page loading, http req for the JS files, JS compiling/exec etc) the links are hidden so it looks pretty good.

$(function () {
    $('.menuT1').show(); //do it before not after in this case.
    $('.menuT1 > ul').ddMenu({


Well, If you are familiar with jquery then I would do something like this

$("#mybuttom").click(function() {
           $("#mydiv").hide(); //hide the div at the start of process
           $.post( "mypostpage.php", 
                   { testvar: testdata },
                   function(data) {
                         //callback function after successful post
                         $('#mydiv').show(); //show it again
                   }
           );
});
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜