读《JavaScript DOM编程艺术》笔记一

边读JavaScript DOM编程艺术边记录了一些知识点,书确实挺不错的,很多东西讲得很清楚

发现我写的有很多英文不知道为什么没有了,建议选择内容来看,能看到消失的单词

=================================================

第一种方式是将JavaScript代码放到文档head标签中的script标签之间

一种更好的方式是把JavaScript代码存为一个扩展名为js的独立文件。典型做法是在文档的head部分放一个script标签,src指向该文件

<script src=”xx.js”></script>

最好的做法是把script标签放到HTML文档的最后,</body>标签之前,这样可以使浏览器更快地加载页面

<script src=”xx.js”></script>

</body>

 ===================================================================

JavaScript语言里,变量和其他语法元素的名字都是区分字母大小写的。

 =======================================================================

必须明确类型声明的语言称为强类型语言,JavaScript不需要进行类型声明,因此它是一种弱类型语言。这意味着程序员可以在任何阶段改变变量的数据类型。

 =====================================================================

字符串:注意如果字符串里有单引号或双引号是字符串的一部分需要用转义

Var mood=’don\’t ask’;

Var height=”about 5’10\” tall”;

反斜杠\就是用来转义的。

================================================== 

创建对象:var Lennon=Object()

Lennon.name=”liona”;

Lennon.year=1967;

Lennon.living=false;

var Lennon={name:”johon”,year:1987,living:true};

=======================================================

Var message=”i am felling”+”happy”;

像这样把多个字符串首尾相连在一起的操作叫做拼接

甚至可以把数值和字符串拼接在一起,此时数值将被自动转换成字符串

Var year=302;

Var message=”this year is”+year;

==========================================================

在命令变量时,我用下划线来分割各个单词;在命名函数时,从第二个单词开始把每个单词的第一个字母写成大写(驼峰命名)。这样可以一眼看出哪些名字是变量哪些是函数。

=============================================================

变量的作用域:

全局变量-可以再脚本的任意位置被引用,全局变量的作用域是整个脚本

局部变量-只存在于声明它的那个函数的内部。局部变量的作用域仅限于某个特定的函数

如果在某个函数中使用了var,那个变量就会被视为一个局部变量,它只存在于这个函数的上下文中;如果没有用var,那个变量就会被视为一个全局变量,如果脚本里已经存在一个与之同名的全局变量,这个函数就会改变那个全局变量的值。

================================================================================

为给定对象创建一个新的实例需要使用new关键字

Var Jeremy=new Person;

=============================================

内建对象:JavaScript里提供了一系列预先定义好的对象,可以拿来就用

像数组、MathDate都是内建对象。

宿主对象:除了内建对象还可以在JavaScript脚本里使用一些已经预定义好的其他对象。这些对象是由运行环境提供的,具体到web,这个环境就是浏览器。由浏览器提供的预定义对象被称为宿主对象

宿主对象包括:FormImageElement等。我们可以通过这些对象获得关于网页上的表单、图像和各种表单元素等信息还有document对象。

JavaScript语言里的对象可以分为三种类型:

用户自定义对象

内建对象

宿主对象

JavaScript最初版本里最基础的宿主对象是window对象,对应的是浏览器窗口本身。这个对象的属性和方法通常称为BOM浏览器对象模型。

============================================================

获取元素:3DOM方法可以获取元素节点

getElementById

getElementsByTagName

getElementsByClassName

====================================================

getElementsByClassName只有比较新的浏览器才支持它,可以用以下函数,能适应新老浏览器

Function getElementsByClassName(node,classname){

  If(node.getElemensByClassName){

Return node.getElementsByClassName(classname);

}else{

Var results=new Array();

Var elems=node.getElementsByTagName(“*”);

For(var i=0;i<elems.length;i++){

 Results[results.length]=elems[i];

}

}

return results;

}

}

===============================================

获取和设置属性

getAttributeobject.getAttribute(attribute)

该方法不属于document对象,不能通过document对象调用,只能通过元素节点对象调用。

setAttributeobject.setAttribute(attribute,value)也只能用于元素节点

==================================================================

childNodes属性:获取任何一个元素的所有子元素【空格或换行符等都会被解释为节点,他们会全都在childNodes属性所返回的数组当中】

nodeType属性:获取节点的属性

元素节点的nodeType属性值为1

属性节点的nodeType属性值是2

文本节点的nodeType属性值是3

nodeValue属性:如果想改变一个文本节点的值,那就使用DOM提供过的nodeValue属性。

再用nodeValue属性获取ID对象的值时,得到的并不是包含在这个段落里的文本,真正需要的是元素的第一个子节点

==================================================================

弹出的广告窗口和内容覆盖是一个典型的滥用JavaScript例子。

=================================================================

平稳退化:如果正确地使用了JavaScript脚本,就可以让访问者在他们的浏览器不支持JavaScript的情况下仍能顺利地浏览你的网站,这就是平稳退化。就是说,虽然某些功能无法使用,但最基本的操作仍能顺利完成。

============================================================

JavaScript使用window对象的open()方法来创建新的浏览器窗口。这个方法有三个参数

Window.open(url,name,featrues);

三个参数都可选

第一个是想在新窗口打开的网页的URL地址

第二个是新窗口的名字

最后一个是以逗号分隔的字符串,内容是新窗口的各种属性,尺寸、新窗口被启用或禁用的各种浏览功能等等。原则是新窗口的浏览功能要少而精

Function popUp(winURL){

  Window.open(winURL,”popup”,”width=320,height=480”);

}

====================================================

调用popUp函数的一个办法是使用伪协议

“javascript:” 伪协议

真协议用来在因特网上的计算机之间传数据包,如http协议,FTP协议等。伪协议则是一种非标准化的协议。JavaScript:伪协议让我们通过一个连接来调用JavaScript函数

例子:<a href=”javascript:popUp(‘http://www.zhengshuang.com/’);”>Example</a>

这条语句在支持伪协议的浏览器正常运行,较老的浏览器会尝试打开连接但会失败,支持这种伪协议但禁用了JavaScript功能的浏览器什么也不做

总之,在HTML文档里通过JavaScript:伪协议调用JavaScript代码的做法非常不好

极少数的搜索机器人能够理解JavaScript代码,所以JavaScript网页的平稳退化对搜索引擎上的排名很重要。

<a href=”http://www.zhengshuang.com/” 

οnclick=”popUp(‘http://www.zhengshuang.com/’);return false;”>Example</a>

或者

<a href=”http://www.zhengshuang.com/” 

οnclick=”popUp(this.getAttribute(‘href’));return false;”>Example</a>

或者

<a href=”http://www.zhengshuang.com/” 

οnclick=”popUp(this.href);return false;”>Example</a>

这样即使JavaScript已被禁用或遇到了搜索机,这个链接也是可用的,虽然这个链接在功能上打了点折扣,但他并没有彻底失效。这是一个经典的平稳退化的例子。

渐进增强:所谓渐进增强就是用一些额外的信息层去包裹原始数据。。按照渐进增强原则创建出来的网页几乎都符合平稳退化原则

Window.οnlοad=

对象检测:检测浏览器对JavaScript的支持程度。

例如有一个使用了getElementById()方法的函数,可以在调用之前检查浏览器是否支持这个方法,注意一定要删除方法名后面的圆括号

Function myFunction(){

  If(document.getElementById){

Use

}

}

改成如果不支持请离开的格式比较好

If(!getElementById){

  Return false;

}

这么做是为了让脚本有良好的向后兼容性。

================================================================

性能考虑

很多人会忽视脚本对web应用整体性能的影响。为保证应用流畅地运行,在为文档编写和应用脚本时,需要注意一些问题:

尽量少访问DOM和尽量减少标记:在多个函数都会取得一组类似元素的情况下,可以考虑重构代码,把搜索结果保存在一个全局变量里,或者把一组元素直接以参数形式传递给函数。

合并和放置脚本:放在</body>之前会比较好

压缩脚本:压缩脚本文件,可以把文件中不必要的字节,空格,注释等统统删除。

通常你应该有两个版本,一个是工作副本,可以修改代码并添加注释,另一个是精简版本,用于放在站点上。精简版本最好加上min

推荐几个代码压缩工具:JSMin、雅虎的YUI Compressor、谷歌的Closure Compiler

=============================================================================

最好不要用onkeypress事件处理函数,onclick事件处理函数已经能满足需要。

Document.write()

结构、行为和样式的分离应避免使用document.write方法

InnerHTML属性可以用来读、写给定元素里的HTML内容。

Var test=document.getElementById(“testdiv”);

Alert(test.innerHTML);

innerHTML既支持读取,又支持写入

test.innerHTML=”<p>insert</p>”;

缺点是,一旦你使用了innerHTML属性,它的全部内容都将被替换

 附上JavaScript图片库实例代码,是对所学知识的实例应用

===========================================================

HTML:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <link rel="stylesheet" href="showPic.css">
</head>
<body>
<h1>JavaScript图片库1</h1>
<ul id="imageGallery">
    <li>
        <a href="zs/zs4.jpg"  title="shuang1">大脑壳wuli1</a>
        <a href="zs/zs5.jpg"  title="shuang2">大脑壳wuli2</a>
        <a href="zs/zs6.jpg"  title="shuang3">大脑壳wuli3</a>
        <a href="zs/zs7.jpg"  title="shuang4">大脑壳wuli4</a>
    </li>
</ul>
<img id="placeholder" src="zs/holder.png" alt="我的图片库">
<p id="description">选择wuli小爽的图片</p>
<script src="showPic.js"></script>
<!--第一个问题是它支持平稳退化吗?如果JavaScript功能被禁用会怎样?-->
<!--检查过代码后,结论是已经为此预留了退路,即使JavaScript功能被禁用,用户也可以浏览图片库里的所有图片,网页里的链接也都可以正常工作。-->
<!--第二个问题,JavaScriptHTML标记是分离的吗?(这里是修改后的代码,源代码如下:
<ul>
    <li>
        <a href="zs/zs4.jpg" οnclick="showPic(this);return false;" title="shuang1">大脑壳wuli1</a>
        <a href="zs/zs5.jpg" οnclick="showPic(this);return false;" title="shuang2">大脑壳wuli2</a>
        <a href="zs/zs6.jpg" οnclick="showPic(this);return false;" title="shuang3">大脑壳wuli3</a>
        <a href="zs/zs7.jpg" οnclick="showPic(this);return false;" title="shuang4">大脑壳wuli4</a>
    </li>
 )-->
<!--答案是他们混杂在一起了,对此进行修改,修改后代码放置在JavaScript图片库1.html-->
</body>
</html>
CSS:

body{
    font-family: "Helvetica","Arial","serif";
    color:#333;
    background-color:#ccc;
    margin:1em 10%;
}
h1{
    color:#333;
    background-color:transparent;
}
a{
    color:#c60;
    background-color:transparent;
    font-weight:bold;
    text-decoration: none;
}
ul{
    padding:0;
}
ul li{
    list-style-type:none;
    float:left;
    padding:1em;
}
img{
    display: block;
    clear:both;
}

js:

/**
 * Created by Administrator on 2016/7/21.
 */
window.οnlοad=function(){
    if(!document.getElementById){
      return false;
    }
    if(!document.getElementsByTagName){
        return false;
    }
    if(!document.getElementById("imageGallery")){
        return false;
    }
    var gallery=document.getElementById("imageGallery");
    var links=gallery.getElementsByTagName("a");
    for(var i=0;i<links.length;i++){
        links[i].οnclick=function(){
            showPic(this);
            return false;
        }
    }
}
function showPic(whichPic){
    var source=whichPic.getAttribute("href");//得到a标签的href属性值
    var text=whichPic.getAttribute("title");//得到a标签的title属性值
    var description=document.getElementById("description");//IDdescription的元素p
    var placeholder=document.getElementById("placeholder");//IDplaceholder的元素img
    placeholder.setAttribute("src",source);//设置imgsrc为所点击的a标签的href
    description.firstChild.nodeValue=text;//设置p的文本为所点击的a标签的title
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辣姐什么鬼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值