【问题标题】:Javascript document write overwriting page?Javascript文件写覆盖页面?
【发布时间】:2010-12-23 16:08:27
【问题描述】:

我是 javascript 的新手。

我正在尝试使用 document.write(使用 Wordpress)创建一个标签,以添加一种在预加载图像之前隐藏图像的样式。在通过 CSS 加载图像之前,我不得不求助于编写 Javascript 样式来隐藏图像。我不想将其实际写入 CSS 文件,以防用户禁用了 Javascript,然后图像将永远不会显示。

我正在尝试让这段代码工作:

jQuery(function($) {
    document.write('<style type="text/css"> .preload img { display: none; } </style>');
    $('#body-wrap').preloadThis();
});

但是,它只是覆盖整个页面并使其变为空白。我怎样才能阻止这个?我想在不删除页面的情况下将标签添加到。尝试使用'return',没有运气。

对不起,我是新手。提前致谢。

【问题讨论】:

    标签: javascript coding-style


    【解决方案1】:

    在页面加载完成后使用document.write() implicitly calls document.open(),这将创建一个新页面。您通常应该避免使用document.write() 并坚持使用正确的 DOM 创建技术,或者使用 jQuery 的速记创建方法:

    jQuery(function($) {
        $('<style type="text/css"> .preload img { display: none; } </style>')
            .appendTo("head");
        $('#body-wrap').preloadThis();
    });
    

    我假设您无法编辑页面加载的 HTML 或 CSS 文件以包含此规则?如果是这种情况,并且您希望在页面完成加载之前应用这些样式,请从 jQuery 就绪处理程序中取出 `document.write()`:
    // write() before the document finishes loading
    document.write('<style type="text/css"> .preload img { display: none; } </style>');
    jQuery(function($) {
        $('#body-wrap').preloadThis();
    });
    

    这将在当前执行的&lt;script&gt; 标记之后立即写入&lt;style&gt; 标记。希望这是在您的 &lt;head&gt; 元素中,因为 &lt;style&gt; 在其他任何地方都无效,尽管所有浏览器都应该以任何方式解析它。

    【讨论】:

    • 与使用 .hide() 的问题相同。当图像被缓存(在上一页加载时加载)时,它们在应用 jQuery 之前可见。这会导致图像在隐藏之前出现,然后被预加载插件淡入。试图在隐藏之前消除闪烁。
    • @Matthew:我已经更新了我的答案。如果页面没有完成加载,使用 document.write 是安全的,所以如果你把它从 jQuery 的文档准备处理程序中取出,你应该没问题。
    【解决方案2】:

    你不需要添加&lt;style&gt;标签,你可以用jQuery隐藏它们:

    jQuery(function($) {
        $('.preload img').hide();
        $('#body-wrap').preloadThis();
    });
    

    不知道你的preloadThis() 函数是如何工作的,但我猜它会加载图像并从img 容器中删除.preload 类。如果确实如此,那么此代码将无济于事 - 图像将保持隐藏状态。

    【讨论】:

    • 不,它会在 .preload 中找到所有图像并将它们淡入。 .hide() 的问题是,当图像被缓存时,它的启动速度不够快,因此图像对于在它们被隐藏之前的一瞬间,它们就会淡入。看起来不太好。
    猜你喜欢
    • 1970-01-01
    • 2011-05-21
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多