可以让访问者在他们的浏览器不支持JavaScript的情况下仍能顺利地浏览你的网站。这就是所谓的平稳退化
“真”协议用来在因特网上的计算机之间传输数据包,如HTTP协议(http://)、FTP协议(ftp://)等,伪协议则是一种非标准化的协议。“javascript:”伪协议让我们通过一个链接来调用JavaScript函数。在支持它的游览器中链接能够正常打开不支持它的游览器则会什么有不做。
总之,在HTML文档里通过“javascript:”伪协议调用JavaScript代码的做法非常不好。
// 打开新的连接,一个参数为链接,第二个参数为方式(_self,_blank),第三个参数为视口配置
window.open("https://www.baidu.com/","_blank","width=100,height=300")
点击事件
此段代码当用户禁用掉js后页面就没办法正常跳转
// href="#"表示创建一个空链接,return false表示阻止触发href
跳转
设置href。由于禁掉了js所以onclick不会触发
跳转
类似于使用style属性,在HTML文档里使用诸如onclick之类的属性也是一种既没有效率又容易引发问题的做法。
跳转
解决方式1,放在head标签中不过js文件要等待游览器html元素加载完成后执行
...
// index.js
// 需要等页面加载完成后执行操作
window.onload = function() {
// 获取dom
const target=document.getElementById('target_a');
// 获取dom中的href
const href=target.getAttribute("href");
// 绑定事件回调
target.onclick=open_win
function open_win(){
window.open(href,"_self");
}
}
解决方式2,放在html元素后一般放在body最后位置。让游览器优先加载html元素
跳转
const target = document.getElementById('target_a');
const href = target.getAttribute("href");
target.onclick = open_win
function open_win() {
window.open(href, "_self");
}
为了保障代码的健壮性我们可以在调用某个dom方法前判断游览器是否支持
function open_win() {
if(!document.getElementById)return;
...
}
不管什么时候,只要是查询DOM中的某些元素,浏览器都会搜索整个DOM树,从中查找可能匹配的元素
function fn(){
if(document.getElementsByClassName("a").length>0){
let alls=document.getElementsByClassName("a");
alls=Array.from(alls);
alls.forEach((item)=>{
console.log(item);
})
}
}
上述代码中对dom树搜索了两次这是及其不合理的,可以搜索的结果存储在一个变量中来优化性能
function fn(){
const alls=document.getElementsByClassName("a")
if(alls.length>0){
alls=Array.from(alls);
alls.forEach((item)=>{
console.log(item);
})
}
}
在比较复杂的项目中可以吧dom搜索的结果存储在全局变量中,方便维护减少性能消耗
下述做法是不推荐的因为会增加游览器的请求次数,最好的做法是把他们在一个js文件中加载然后引入html中
在下载js期间,浏览器不会下载其他任何文件,即使是来自不同域名的文件也不会下载,所有其他资源都要等js加载完毕后才能下载。所以js放在body最后可以加快游览器的加载速度
所谓压缩脚本,指的是把脚本文件中不必要的字节,如空格和注释,统统删除,从而达到“压缩”文件的目的。下面是几个压缩代码的工具