JavaScript 函数 & 平稳退化
基础函数及属性
点击事件:
onclick = "function(this)"
onclick = "return false": 阻止窗口跳转
childNodes属性:
返回包含某个元素所有子元素的数组
由于文档里几乎所有东西都是节点,包括空格和换行符
nodeType属性:
返回节点的属性
1 -- 元素节点;
2 -- 属性节点;
3 -- 文本节点
nodeValue属性:
返回节点的属性值,元素节点的nodeValue属性为null
用于检索/设置节点元素的属性
firstChild & lastChild:
返回第一个子元素 & 最后一个子元素
平稳退化:
在浏览器不支持JavaScript的情况下,仍然能够顺利浏览网页
window.open(url, name, features)
打开一个新窗口;
url:网页url地址;
name:新窗口名字;
features:新窗口属性
真协议:http/ftp等标准协议
javascript伪协议:非标准化协议,可以通过连接调用js函数,是一种非常不好的做法(不支持js的浏览器将无法打开连接)
平稳退化的原因:搜索引擎使用搜索机器人,通常不能理解js,不能平稳退化将影响网页在搜索引擎上的排名
例子:
<a href="http://www.baidu.com" onclick="popUp(this.href; return false;)">Example</a>
确保js不能使用也能够打开连接
分离JavaScript:
将元素节点中的事件属性分离开来,在js外部文档中进行处理
getElementById(id).event = action
处理多个元素节点步骤:
1)把文档里所有链接放到数组里;
2)遍历数组;
3)根据链接属性调用相应的函数
function prepareLinks() {
var links = document.getElementsByTagName("a");
for(var i = 0; i < links.length; i++) {
if (links[i].getAttribute("class") == "popup") {
links[i].onclick = function() {
popUp(this.getAttribute("href"));
return false;
}
}
}
}
向后兼容:
对象检测:检测浏览器对javascript的支持程度
使用if语句
例如使用了:getElementById
可以在使用前判断 if(!getElementById) return false; //如果不能使用此方法,则返回false
性能考虑:
1)尽量减少对DOM的访问(把多次相同的访问存储在同一个变量中);每次DOM搜索都会访问整个文档树
2)合并放置js脚本
3)压缩脚本(删除空格、注释等)
代码压缩工具:
JSMin、YUI Compress、Closure Compiler
加载多个js函数:
使用addLoadEvent()函数
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
}
else {
window.onload = function() {
oldonload();
func();
}
}
}
平稳退化实例:
html:
<html>
<head lang="en">
<meta charset = "utf-8"/>
<title>Image Gallery</title>
<link rel = "stylesheet" href = "layout.css"/>
</head>
<body>
<h1>Products</h1>
<ul id = "gallery">
<li>
<a href = "image/apple.png" title = "apple">Apple</a>
</li>
<li>
<a href = "image/iphone.png" title = "iphone">Iphone</a>
</li>
<li>
<a href = "image/watch.png" title = "watch">Watch</a>
</li>
</ul>
<img id = "placeholder" src = "image/test.png"/>
<p id = "description">choose an image</p>
<script type = "text/javascript" src = "test.js"></script>
</body>
</html>
js:
function showPic(whichPic) {
if (!document.getElementById("placeholder")) {
return false;
}
var source = whichPic.getAttribute("href");
var placeholder = document.getElementById("placeholder");
placeholder.setAttribute("src", source);
if (document.getElementById("description")) {
var text = whichPic.getAttribute("title");
var description = document.getElementById("description");
description.firstChild.nodeValue = text;
}
return true;
}
function prepareGallery() {
//检查方法是否支持
if(!document.getElementById) {
return false;
}
if(!document.getElementsByTagName) {
return false;
}
if(!document.getElementById("gallery")) {
return false;
}
//命名对象
var gallery = document.getElementById("gallery");
var links = gallery.getElementsByTagName("a");
//遍历
for(var i = 0; i < links.length; i++) {
links[i].onclick = function() {
return !showPic(this);
//showPic成功,则返回false,阻止默认行为发生(弹出窗口)
//失败(没有placeholder),则返回true,弹出链接窗口
}
}
}
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
}
else {
window.onload = function() {
oldonload();
func();
}
}
}
addLoadEvent(prepareGallery);
对于包含链接的元素,在设置事件属性是,需要考虑返回值,确保某些id被删除,仍然能够正确的访问链接
键盘访问:
onkeypress事件,大部分按键都可以触发此事件,最好不要使用此事件
通常使用tab和return就可以代替鼠标出发onclick事件
参考书籍:《DOM编程艺术》第4-6章
上一篇: 无法观看coursera视频解决办法
推荐阅读
-
javascript 有用的脚本函数_javascript技巧
-
window.addeventjs事件驱动函数集合addEvent等_javascript技巧
-
Javascript中Eval函数的使用说明_javascript技巧
-
JavaScript 嵌套函数指向this对象错误的解决方法_javascript技巧
-
JavaScript数组、json对象、eval()函数用法实例分析
-
javascript可以实现警告框的函数是什么
-
Javascript入门学习第五篇 js函数第1/2页_基础知识
-
JavaScript生成随机数的4种自定义函数分享_javascript技巧
-
javascript trim函数在IE下不能用的解决方法_jquery
-
JavaScript函数式编程(二)