详解如何较好的使用js


Posted in Javascript onDecember 16, 2016

1 假如浏览器不支持JavaScript怎么办?

a.为什么浏览器会不支持?大部分浏览器都有禁用脚本的功能,例如chrome。

详解如何较好的使用js

b.在js被禁用的情况下要保证网页仍能实现它的核心功能(关键的用户需求)

例子:在一个新窗口里打开链接,可以使用BOM的open()方法

function popUp(winURL) {
 window.open(winURL, "popup", "width=320,height=480");
}

具体的js实现有以下几个方案:

方案一:使用javascript伪协议:<a href="javascript:popUp('http://www.example.com');return false;">Example</a>

方案二:使用内嵌的事件处理函数:<a href="#" onclick="popUp('http://www.example.com');return false;"></a>

以上两种种实现方案,在js被禁用时,“在一个新窗口里打开链接”这个需求就无法满足了。所以,不能为了单纯使用js而滥用js。下面这个实现方案就为js预留出了退路,即所谓平稳退化(留好js被禁后的退路)

方案三:平稳退化<a href="http://www.example.com" onclick="popUp(this.href;return false;)">

2 如何将网页的结构、内容与JavaScript脚本的动作分离开?为什么要分离开?

a.分工明确,各干各的,然后才是协作:

网页结构、内容-由html来做、网页的样式-由CSS来做、网页的行为-由JavaScript来做

b.分离js代码其实很简单,js代码不要求事件必须在html中处理,可以在外部js文件里将一个事件添加到html文档中的某个元素上。例如:

window.onload = paperLinks
 function paperLinks() {
 var links = document.getElementsByTagName("a");
 for (var i=0; i<links.length;i++){
 if (links[i].getAttribute == "popup") {
  linnks[i].onclick = function() {
  popUp(this.getAttribute("href"));
  return false;
  }
 }
 }
 }

3 浏览器的兼容性问题

 新老要通吃,尤其要注意老的,即向后兼容。不同的浏览器对js的支持程度不一样,比如document.getElementsByClassName(classname)IE6就不支持,加一个检查语句就可以检查兼容性问题:if(!document.getElementsByClassName) return false;

4 性能考虑

为什么要考虑脚本执行的性能?性能是永远要考虑的问题,这涉及到你编写的网页能否顺利的加载。

如何保证脚本执行的性能是最优的?

a.尽量少访问dom和少使用标记,例如:少用循环遍历

var links = document.getElementsByTagName("a");
 if (links.length > 0) {
 for (var i=0; i<links.length; i++) {
 //......
 }
}

就要比下面的代码性能要好

if (document.getElementsByTagName("a").length > 0) {
    var links = document.getElementsByTagName("a");
    for (var i=0; i<links.length; i++) {
    //......
    }
}

b.合并脚本(js代码),减少页面加载时发送的请求数量;将<script>标签放置于文档末尾,在</body>结束之前,这样可以让页面加载的快些,且不影响js的加载。

c.压缩脚本,将js代码中不必要的空格、注释删除,甚至可以将变量名简化。可以准备两个版本的js:一个是工作版本,用于修改代码和注释,另一个为精简版本,则用于发布。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
jQuery 渐变下拉菜单
Dec 15 Javascript
ExtJs grid行 右键菜单的两种方法
Jun 19 Javascript
jQuery.extend()的实现方式详解及实例
Jun 29 Javascript
js之事件冒泡和事件捕获详细介绍
Oct 28 Javascript
详细分析使用AngularJS编程中提交表单的方式
Jun 19 Javascript
jquery实现未经美化的简洁TAB菜单效果
Aug 28 Javascript
拖动时防止选中
Feb 03 Javascript
vue 中自定义指令改变data中的值
Jun 02 Javascript
jQuery插件实现弹性运动完整示例
Jul 07 jQuery
简单两步使用node发送qq邮件的方法
Mar 01 Javascript
使用localStorage替代cookie做本地存储
Sep 25 Javascript
微信小程序点击生成朋友圈分享图(遇到的坑)
Jun 17 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
Dec 16 #Javascript
详解js的事件处理函数和动态创建html标记方法
Dec 16 #Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
Dec 16 #Javascript
JS限制条件补全问题实例分析
Dec 16 #Javascript
Node.js用readline模块实现输入输出
Dec 16 #Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
Dec 16 #Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
Dec 16 #Javascript
You might like
文件系统基本操作类
2006/11/23 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
Symfony核心类概述
2016/03/17 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
详解json在php中的应用
2018/09/30 PHP
php intval函数用法总结
2019/04/14 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
JQuery与Ajax调用新浪API获取短网址的代码
2014/02/07 Javascript
javascript 原型链维护和继承详解
2014/11/26 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
基于WebUploader的文件上传js插件
2016/08/19 Javascript
jQuery属性选择器用法示例
2016/09/09 Javascript
微信小程序实战之运维小项目
2017/01/17 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
vue webpack打包后图片路径错误的完美解决方法
2018/12/07 Javascript
react中使用css的7中方式(最全总结)
2019/02/11 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作
2020/10/30 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
pycharm 实现显示project 选项卡的方法
2019/01/17 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
python使用paramiko实现ssh的功能详解
2020/03/06 Python
在 Python 中使用 7zip 备份文件的操作
2020/12/11 Python
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
C# Debug和Testing相关面试题
2015/10/25 面试题
教师年度考核自我鉴定
2014/01/19 职场文书
安全生产汇报材料
2014/02/17 职场文书
初中生庆国庆演讲稿范文2014
2014/09/25 职场文书
2015年会计人员工作总结
2015/05/22 职场文书
Mysql中存储引擎的区别及比较
2021/06/04 MySQL