我是Javascript的新手,我使用此代码来调用javascription函数:
<body onload="replaceLinks()">
这是放在我的身体标签下面。问题是,它在页面加载后执行,而且对于我想要完成的事情来说还不够快。
如何将它放在文档的头部,以便首先加载?
谢谢!
<script>
function replaceLinks() {
var links = document.querySelectorAll('.restore a:link');
for (var i = 0; i < links.length; i++) {
if (/\.(jpg|gif|png|jpe?g)$/.test(links[i].href)) continue;
links[i].innerHTML = '<a href="/register.php" class="guestbutton">DOWNLOAD VIDEO</a>';
links[i].href = 'register.php';
}
}
</script>
答案 0 :(得分:1)
将JS放在头部,而不是作为一个函数,而是作为一个立即执行的语句(或者如果你想防止变量泄漏,则为IIFE)。然后,请勿从<body onload>
拨打电话。
但是,如果您的函数修改了DOM,则需要等到DOM(或相关部分)完成加载。
答案 1 :(得分:0)
它在页面加载后执行,并且对于我正在尝试完成的事情来说还不够快。
onload事件将等待页面加载 - 具体取决于您的页面正在做什么,这可能是一个显着的延迟。
修改页面内容的脚本必须等待它想要修改的内容存在。这并不意味着等待文件准备就绪。
因此,例如,这不起作用:
<html>
<head>
<script>
function replaceLinks() {
var links = document.querySelectorAll('.restore a:link');
for (var i = 0; i < links.length; i++) {
if (/\.(jpg|gif|png|jpe?g)$/.test(links[i].href)) continue;
links[i].innerHTML = '<a href="/register.php" class="guestbutton">DOWNLOAD VIDEO</a>';
links[i].href = 'register.php';
}
}
replaceLinks(); // run the replace function
</script>
</head>
<body>
<a class="restore" href="#">A link</a>
</body>
</html>
它不起作用,因为调用replaceLinks
时它应修改的链接尚不存在。
put scripts at the end of the page这是一种普遍持有的最佳做法。即对于像这样的问题中的例子:
<html>
<head>
</head>
<body>
<a class="restore" href="#">A link</a>
<script>
function replaceLinks() {
var links = document.querySelectorAll('.restore a:link');
for (var i = 0; i < links.length; i++) {
if (/\.(jpg|gif|png|jpe?g)$/.test(links[i].href)) continue;
links[i].innerHTML = '<a href="/register.php" class="guestbutton">DOWNLOAD VIDEO</a>';
links[i].href = 'register.php';
}
}
replaceLinks(); // run the replace function
</script>
</body>
</html>
通过这种方式,它想要修改的内容在运行时已经存在,并且一旦解析了脚本标记就会立即运行。
请注意,该函数不需要在同一个脚本块中,它只需要在被调用之前定义(它可以在头部声明 - 但是没有理由这样做)。
但问题中提出的问题存在许多问题:
因此,在发送给客户端之前,不使用javascript执行此任务并修改服务器上的内容将更加合适
。