Javascript文件写覆盖页面?

IT技术 javascript coding-style
2021-03-15 14:57:01

我对 javascript 很陌生。

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

我试图让这段代码工作:

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

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

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

2个回答

document.write()在页面完成加载后使用隐式调用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();
});

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

与使用 .hide() 相同的问题。当图像被缓存(在上一页加载时加载)时,它们在应用 jQuery 之前是可见的。这会导致图像在隐藏之前出现,然后被预加载插件淡入。试图在隐藏之前摆脱闪烁。
2021-04-25 14:57:01
@Matthew:我已经更新了我的答案。document.write如果页面尚未完成加载,则使用它是安全的,因此如果您将其从 jQuery 的文档就绪处理程序中取出,您应该没问题。
2021-05-05 14:57:01

你不需要添加<style>标签,你可以用 jQuery 隐藏它们:

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

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

不,它会找到 .preload 中的所有图像并将它们淡入淡出。 .hide() 的问题在于,当图像被缓存时它的启动速度不够快,因此图像在隐藏之前一瞬间可见,然后它们就淡入了。看起来不太好。
2021-05-07 14:57:01