《JavaScript DOM 编程艺术》(第二版)读书笔记(三)

第六章 案例研究:图片库改进版

这一章将根据第五章提到的内容对图片库进行了改进

首先检查DOM方法是否被游览器支持

if(!document.getElementById)  return false;
if(!document.getElementsByTagName)  return false;
if(!document.getElementById("placeholder"))
//.......类似的测试

接下来讲到了一个重点内容:共享onload事件

JavaScript往往需要在HTML文档加载结束后执行,不然一些dom方法会找不到对象,这就是为什么jquery

作者给出了一个有意思的方法,用于加载多个函数,这个方法看起来很简单,但其中思想需要仔细领悟,这本书中以后的几个方法的思路也是类似的

addLoadEvent函数

function addLoadEvent(func) {
    var oldonload=window.onload;
    if(typeof window.onload != ‘function‘){
        window.onload=func;
    } else {
        window.onload= function (){
            oldonload();
            func();
        }
    }
}

1.把现有的window.onload事件处理函数存入变量oldonload.

2.如果在这个处理函数上还没有绑定任何函数,就向平时一样把函数添加给它.

3.如果在这个处理函数上已经绑定了一些函数,就把新函数追加到现有函数末尾.

三元操作符

variable(变量) = condition(条件) ? if true : if else;

可以看出三元操作符是if/else 的一种变体

nodeName属性

返回元素的标签名,总是返回大写字母比如IMG,P,A等html标签

第七章 动态创建标记

document.write()方法可以轻松的把字符串插入文档,但是它不能做到javascript完全与html分离,必须吧<script>放到<html>里。

innerHTML属性

该属性被浏览器广泛支持,既能用于读取,又能用于写入

利用这个技术无法区分“插入一段html内容”与“写入一段html内容”。一旦使用innerHTML,它的全部内容将被替换。

<div id="test">
  <p>this is <em>my</em> content.</p>
</div>
var text= document.getElementById("test").innerHTML
alrert(text) // <p>this is <em>my</em> content.</p>

<div id="test">
</div>
document.getElementById("test").innerHTML = "<p>this is <em>my</em> content.</p>"  //浏览器中会看到相应效果

DOM方法介绍

1.createElement方法

document.createElement(nodename);

创建一个元素节点,只不过属于文档碎片(document fragment),没有成为DOM节点树的一部分,需要被添加进DOM树。

2.appendChild方法

parent.appendChild(child)

把新创建的节点插入某个文档的节点树,让它成为这个文档某个现有节点的子节点。

3.createTextNode方法

document.createNode(text)

创建一个文本节点,注意它与createElement的差别。

现在innerHTML方法就能用上述几个DOM方实现了。

4.insertBefore()方法

parentElement.insertBefore(newElement,targetElement)

把一个新元素插入到一个现有元素的前面,必须告诉它父元素(parentElement)、新元素(newElement)、目标元素(targetElement)。

5.insertAfter()函数(DOM中没有此方法)

function insertAfter(newElement,targetElement){
    var parent=targetElement.parentNode;
    if(parent.lastChild==targetElement){
        parent.appendChild(newElement);
    } else {
        parent.insertBefore(newElement,targetElement.nextSibling);
    }
}

parentNode属性:父节点;nextSibling属性:下一个兄弟元素节点;

这个函数十分简单,却效果很好。

Ajax

这是前端必须掌握的技能,现在页面已经离不开Ajax效果了,开发人员一般用jquery来处理这一行为,作者介绍了javasciprt方法

获取XMLHttpRequest对象,作者提供了兼容的方法,记下就好

function getHTTPObject(){
    if(typeof XMLHttpRequest == "undefined")
    XMLHttpRequest = function(){
        try {return new ActiveXObject("Msxml2.XMLHTTP.6.0");}
        catch(e){}
        try {return new ActiveXObject("Msxml2.XMLHTTP.3.0");}
        catch(e){}
        try {return new ActiveXObject("Msxml2.XMLHTTP");}
        catch(e){}
        return false;
    }
    return new XMLHttpRequest();
}

作者提供了一个例子:

function getNewContent(){
    var request = getHTTPObject();
    if(request){
        request.open("GET","example.txt",true);
        request.onreadystatechange = function(){
            if(request.readyState==4){
                var para = document.createElement("p");
                var txt = document.createTextNode(request.responseText);
                para.appendChild(txt);
                document.getElementById(‘new‘).appendChild(para);
            }
        };
        request.send(null);
    } else{
        alert(‘Sorry,your browser doesn\‘t support XMLHttpRequest‘);
    }
}
addLoadEvent(getNewContent);

当页面加载完成,以上代码发起一个GET请求,加载exemple.txt文件

request.open()

代码中的onreadystatechange是一个时间处理函数,它会在服务器给XMLHttpRequest对象送回响应时被触发执行

request.onreadystatechange = dosomething

然后就可以发送请求

reequest.send(null)

浏览器会在不同阶段更新readyState属性  0 代表未初始化  1 代表正在加载  2代表加载完毕   3代表正在交互   4表示完成。

在这个例子中readyState=4时,就会从requst里获取requestText内容

这一篇就到这里,Ajax内容在最后一章会有一个更详细的例子

时间: 2024-10-09 07:07:02

《JavaScript DOM 编程艺术》(第二版)读书笔记(三)的相关文章

JavaScript DOM编程艺术第二版学习(1/4)

---恢复内容开始--- 接下来项目需要网页相关知识,故在大牛的指引下前来阅读本书. 当前水平:HTML&CSS&JS基本掌握,能在阅读文档以及Google查找的情况下完成前端代码编写,但是学习不深,HTML5&CSS3新特性.JS基础&框架皆不熟悉 读书目的:了解DOM概念并通过训练熟悉掌握,了解JS特性 博客目的:督促自己学习并记录下过程 博客编写时读书进度:第6章完结 阅读规划: 浏览目录之后,总结该书学习思路大致如下(其实就是生搬目录): 简史->最基础语法-

&lt;&lt;Javascript Dom 编程艺术(第二版)&gt;&gt;摘录

Time flies, my friends. Hope you could stop for a while for my contribution, for your future. 1.节点分为不同的类型:元素节点,属性节点,文本节点. 2.文档中的每个元素节点都是一个对象. 3.onclick事件处理函数所触发的javascript代码里增加一条return false,可以防止用户被逮到目标链接窗口.eg:<a href=‘images/fireworks.jpg’ onclick=’

Javascript Dom编程艺术(第2版)读书笔记

Javascript Dom编程艺术这本书我看的是第2版的,真心觉得这本书不错,它将DOM编程的一些基本原则,及如何让Javascript代码在浏览器不支持的情况下,或浏览器支持了Javascript但用户禁用它的情况下做到平衡退化,让最基本的操作仍能顺利完成,以及如何让结构与样式分享做到真正的渐近增强叙述得很清楚,也很容易理解接受.我也是看了这本书之后,才对代码优化,结构,行为,样式有了进一步的加深理解. Javascript Dom编程艺术(第2版)读书笔记,布布扣,bubuko.com

JavaScript DOM编程艺术 读书笔记

3 DOM DOM分别指document,object和model. DOM中包含的节点主要分为三种:元素节点.文本节点和属性节点.DOM的原子是元素节点,标签的名字就是元素的名字,元素可以包含其他的元素.没有被包含在其他元素里的唯一元素是<html>元素,它是树节点的根元素:在XHTML文档里,文本节点总是被包含在元素节点的内部.但并非所有的元素节点都包含有文本节点:属性节点用来对元素做出更具体地描述. 有3种DOM方法可获取元素节点,分别是通过元素ID.通过标签名字和通过类名字来获取. 1

Javascript DOM 编程艺术读书笔记16/04/01

愚人节快乐 开始用webstorm了,随着学习深入,代码越来越长,因为不借助ide还真是挺难的 今天发现了一个严重的误区,text和textNode是完全不同的两个概念,之前没有特别注意,写代码很容易跳过createTextNode直接用parentNode.appendChild(text) 单独拎出来晒一晒,以后引以为戒 Javascript DOM 编程艺术读书笔记16/04/01

《javascript dom编程艺术》笔记(二)——美术馆示例

这几天把这本书看完了,里面大部分知识我已经会了,所以看得就略简单,好多地方都没有再去动手去做,我知道这样是不对的,以后补吧. 现在我要做的是把这本书的笔记完结掉,不然总觉得有啥事没有做. 这个版本不是书中的最后版本,好像是第二版吧.后面还有动态创建结点的一版本,我已经在别的地方实践过了,就不再做了. 只贴出两个函数. //显示图片方法 function showPicture (whichpic) { //综合绑定的事件考虑,条件执行失败,希望浏览器可以让用户打开图片,因此在onclick处re

JavaScript DOM编程艺术学习笔记(一)

嗯,经过了一周的时间,今天终于将<JavaScript DOM编程艺术(第2版)>这本书看完了,感觉受益匪浅,我和作者及出版社等等都不认识,无意为他们做广告,不过本书确实值得一看,也值得推荐给想了解HDOM的相关人员!首先非常感谢作者写出了这么好的一本书,谢谢!书中的内容比较多,我仅记下我认为对自己和他人有所帮助的一些内容! 嗯,首先还是让代码来说话吧! 下面是两段此书中反复强调且通用的经典代码段 1:相当的经典和实用,尤其是当需要为页面加载函数绑定多个函数的时候 /** * [addLoad

《JavaScript DOM 编程艺术》 ——笔记

以下只是个人的读书笔记,限于本人的知识局限性,可能有偏差.请见谅,欢迎指出问题. 1.本书的名字就是<JavaScript DOM 编程艺术>,那么首先什么是DOM呢? DOM-Document Object MOdel,按字面上的意思翻译就是文本对象模型.“W3C 文档对象模型 (DOM) 是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容.结构和样式.” 它将网页抽象成一个节点树: <!DOCTYPE html> <html lang="en&

《javascript dom编程艺术》笔记(一)——优雅降级、向后兼容、多个函数绑定onload函数

刚刚开始自学前端,如果不对请指正:欢迎各位技术大牛指点. 开始学习<javascript dom编程艺术>,整理一下学习到的知识.今天刚刚看到第六章,记下get到的几个知识点. 优雅降级 看到版本翻译为预留退路,刚刚看到个名词,我觉得很奇怪,以前没有听说过啊.不过看到英文注释就知道了Graceful degradation不就是优雅降级么,听说过! 书中举了个例子,点击一个链接,弹出一个窗口的方法. function popUp(WinURL){ window.open(WinURL,&quo

《javascript DOM 编程艺术》学习笔记(一)

书籍已经看完了前六章的内容,有了一定的编程基础后觉得本书内容相对来说过于简单,应该是完全针对于初学者的(或者如作者所说是写个Web设计师的),作者在表述一个问题,一句代码都解释得非常啰嗦与重复,不过从书中学习到更多的,也是作者想让读者体会的是让大家理解DOM脚本编程技术背后的思路和原则,作者特别以早期Javascript的滥用来强调Web的规范与标准,这一点是非常值得学习的,也是一个程序员的基本素养. 截止到第六章,将所学到的知识点归纳如下: 1.基本语法:与php一样是弱类型语言,虽然功能强大