前端学习程序员前端开发

JavaScript Dom编程艺术学习笔记1

2016-07-24  本文已影响219人  我是刘高兴

前两章的基础内容自己之前的JavaScript笔记已记录过,就不再赘述,直接从第三章Dom开始,Dom内容之前也有写笔记,这里算是补充。


第一章 JavaScript简史

第二章 JavaScript语法

<a name="c1"></a>第三章 Dom

function getElementsByClassName(node,classname) {
     if(node.getElementsByClassName) {//使用现有方法
        return node.getElementByClassName(classname);
    }else{
        var results = new Array();
        var eles = node.getElementsByTagName("*");
        for(var i = 0;i<elems.length;i++) {
            if(elems[i].className.indexOf(classname)!=-1){
                results[results.length] = elems[i];
            }
        }
        return false;
    }
}
for(var i = 0; i<paras.length;i++) { 
     var title_text = paras[i].getAttribute("title");
     if (title_text) { 
        paras[i].setAttribute("title","brand new title text");     
        alert(paras[i].getAttribute("title")); 
     }

<a name = "c2"></a>第四章 JS图片库

function showPic(whichpic){
    var source = whichpic.getAttribute("href");
    var placeholder = document.getElementById("placeholder");
    var text = whichpic.getAttribute("title");//某个图片链接被点击时,该链接的title属性值将被提取并保存到变量text中
    var description = document.getElementById("description");
    placeholder.setAttribute("src", source);//source是属性src的值
    description.firstChild.nodeValue = text;//把description对象的第一个子节点的nodeValue属性值设置为变量text的值
}
//上边的注释可作为编程的思路

<a name = "c22"></a>第五章 最佳实践

  1. 平稳退化(graceful degradation):网页在没有JavaScript的情况下也能正常工作。
function popUp(winURL) { 
      window.open(winURL,"popup","width=320,height=480");
}
<a href="javascript:popUp('http://www.example.com/');">Example</a>

内嵌事件处理函数:

<a href="#" onclick="popUp('http://www.example.com/'); return false;">Example</a>
<a href="http://www.example.com/" onclick="popUp(this.href ); return false;">Example</a>
  1. 分离JavaScript
window.onload = prepareLinks;
function prepareLinks(){ 
//把事件添加到有着特定属性的一组元素上
    var links = document.getElementsByTagName("a"); //1.把文档里的所有链接全放入一个数组里
    for (var i=0; i<links.length; i++) {//2.遍历数组
        if (links[i].getAttribute("class") == "popup"){// 3.如果某个链接的class属性等于popup,就表示这个链接在被点击时应该调用popUp()函数
           popUp(this.getAttribute("href")); //1)把这个链接的href属性值传递给popUp()函数
           return false; //2)取消这个链接的默认行为
        } 
    }
}
function popUp(winURL){ 
    window.open(winURL,"popup","width=320,height=480");
}
//注释可作为编程思路
  1. 把这个链接的href属性值传递给popUp()函数
  2. 取消这个链接的默认行为
  1. 向后兼容,对象检测
if (!getElementyById || !getElementsByTagName)   return false;
//一定要删掉方法后的圆括号,如果不删掉,测试的将是方法的结果,无论方法是否存在。
  1. 性能考虑

常用的代码压缩工具:
JSMin
YUI Compressor
Closure Compiler


<a name="c222"></a> 第六章 JS图片库改进版

1.JavaScript与HTML标记分离

开始时onclick事件处理函数直接插入到HTML文档里:

<ul>
<li><a href = "#" onclick = "showPic(this); return false;" title = "..."></li>
...
</ul>

<ul>设置id属性便可把JS移出文档:
<ul id = "imagegallery">...

function prepareGallery() {
  if (!document.getElementsByTagName) return false;
  if (!document.getElementById) return false;
  if (!document.getElementById("imagegallery")) return false;//1.检查点
  var gallery = document.getElementById("imagegallery");
  var links = gallery.getElementsByTagName("a");//2.变量
  for ( var i=0; i < links.length; i++) {//3.遍历
    links[i].onclick = function() {//4.改变行为
     // return !showPic(this);
        retrun showPic(this) ? false : true;//this在这里代表links[i]
  }
    //links[i].onkeypress = links[i].onclick;尽量不使用键盘触发事件
  }
}
---
links[i].onclick = function() 定义了一个匿名函数:一种在代码执行时创建函数的办法。这个匿名函数里的所有语句都将在link[i]元素被点击时执行。
return !showPic(this):
1.如果showPic返回true,我们就返回false,浏览器不会打开那个链接; 
2.如果showPic返回false,我们认为图片没有更新,于是返回true以允许默认行为发生
3.this在这里代表links[i]
window.onload = function(){
        fisrtFunction();
        secondFunction();
        ...
}

更好的解决方案是利用函数addLoadEvent,它只有一个参数:打算在页面加载完毕时执行的函数的名字,如下:

//代码的注释部分即为addLoadEvent函数将要完成的操作
function addLoadEvent(func) {//只有一个参数,在页面加载完毕时执行的函数的名字
  var oldonload = window.onload;//把现有的window.onload事件处理函数的值存入变量oldonload
  if (typeof window.onload != 'function') {
    window.onload = func;//如果这个处理函数上还没有绑定任何函数,把新函数添加给它
  } else {
    window.onload = function() {
      oldonload();
      func();//如果这个处理函数上已经绑定了一些函数,就把新函数追加到现有指令的末尾
    }
  }
}
addLoadEvent(prepareGallery);

2.DOM Core和HTML-DOM

getElementById,getElementsByTagName,setAttributegetAttribute等方法都是DOM Core的组成部分,不专属于JavaScript,支持DOM的任何一种语言都可以使用。
关于HTML-DOM可以参考这里

上一篇 下一篇

猜你喜欢

热点阅读