详解如何较好的使用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实现滚动新闻
Feb 12 Javascript
javascript中createElement的两种创建方式
May 14 Javascript
jQuery添加options点击事件并传值实例代码
May 18 Javascript
详解jQuery中的事件
Dec 14 Javascript
AngularJS的依赖注入实例分析(使用module和injector)
Jan 19 Javascript
js 提取某()特殊字符串长度的实例
Dec 06 Javascript
angularjs 获取默认选中的单选按钮的value方法
Feb 28 Javascript
vue2.0的虚拟DOM渲染思路分析
Aug 09 Javascript
vue axios 简单封装以及思考
Oct 09 Javascript
JS/CSS实现字符串单词首字母大写功能
Sep 03 Javascript
基于JavaScript 实现拖放功能
Sep 12 Javascript
OpenLayer3自定义测量控件MeasureTool
Sep 28 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
example2.php
2006/10/09 PHP
PHP脚本的10个技巧(4)
2006/10/09 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
2013/06/20 PHP
解析如何去掉CodeIgniter URL中的index.php
2013/06/25 PHP
PHP中cookie和session的区别实例分析
2014/08/28 PHP
thinkPHP5 tablib标签库自定义方法详解
2017/05/10 PHP
HTTP状态代码以及定义(解释)
2007/02/02 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
2013/10/24 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
Nodejs学习笔记之测试驱动
2015/04/16 NodeJs
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
浅谈JavaScript find 方法不支持IE的问题
2017/09/28 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
微信小程序实现获取用户信息并存入数据库操作示例
2019/05/07 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
vue实现图片预览组件封装与使用
2019/07/13 Javascript
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
用Python登录Gmail并发送Gmail邮件的教程
2015/04/17 Python
Python实现求解一元二次方程的方法示例
2018/06/20 Python
python正则表达式之对号入座篇
2018/07/24 Python
python+flask实现API的方法
2018/11/21 Python
python3爬虫怎样构建请求header
2018/12/23 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
斯德哥尔摩通票:Stockholm Pass
2018/01/09 全球购物
意大利奢侈品零售商:ilDuomo Novara
2019/09/11 全球购物
宿舍使用违章电器检讨书
2014/01/12 职场文书
2014年药品销售工作总结
2014/12/16 职场文书
个人年底工作总结
2015/03/10 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python