一、修改网页元素

当使用document提供的方法和Element的属性得到网页元素之后,就可以对元素的内容进行修改,如下例所示的“全选/全不选”的实现。

例3-17

<html>

<head>

<title>全选</title>

<script type="text/javascript">

//实现全选函数

function choose(val){

//通过name属性值得到所有复选框

var listCH = document.getElementsByName("kc");

//循环修改复选框属性

for(var i=0;i<listCH.length;i++){

//修改复选框的状态

listCH[i].checked=val;

}

} </script>

</head>

<body>

<center>

<form>

<h3>你希望学习的课程</h3>

<a href="javascript:choose(true);">全选</a> /

<a href="javascript:choose(false);">全不选</a>

<hr size="1" />

<div style="text-align:left; padding-left:140px;">

<input type="checkbox" name="kc" value="0" />java基础<br>

<input type="checkbox" name="kc" value="1" />HTML + CSS + JavaScript <br>

<input type="checkbox" name="kc" value="2" />java核心<br>

<input type="checkbox" name="kc" value="3" />java web<br>

<input type="checkbox" name="kc" value="4" />SSH<br>

<input type="checkbox" name="kc" value="5" />SqlServer2005<br>

<input type="checkbox" name="kc" value="6" />Oracle10g<br>

</div>

</form>

</center>

</body>

</html>

运行上例,单击【全选】按钮,将看到如图3-21所示的效果。当单击【全不选】按钮的时候,所有复选框的选中都将被去掉,如图3-22所示。

图3-21 全选

图3-22 全不选

二、添加网页元素

添加网页元素主要使用document.createElement()方法和Element.appendChild()方法实现。使用document.createElement()方法用于创建一个元素,新创建的元素是独立的,和HTML文档没有任何关系,所以需要使用Element.appendChild()方法将新创建的网页元素添加到DOM中。如下例所示,在层中动态创建文本框。

例3-18

<html>

<head>

<title>添加网页元素</title>

<script type="text/javascript">

function addTxt(){

//创建一个input元素

var txt = document.createElement("input");

//设置元素为文本框

txt.type="text";

txt.value="新添加的文本框";

//将文本框添加到层中

var div = document.getElementById("disDiv");

div.appendChild(txt);

}

</script>

</head>

<body>

<center>

<div id="disDiv" style="text-align:center; border:1px solid blue; width:450px; height:100px;">

</div>

<input type="button" value="添加文本框" onclick="addTxt()" />

</center>

图3-23 添加网页元素

</body>

</html>

运行上例,当单击页面中的按钮的时候,层中将添加一个文本框,每单击一次执行一次addTxt()函数,每执行一次该函数添加一个文本框,效果如图3-23所示。

三、删除网页元素

删除元素主要通过document的removeChild()方法实现。如下例所示,动态删除层中按钮元素。

例3-19

<html>

<head>

<title>删除网页元素</title>

<script type="text/javascript">

function delEle(){

//得到层

var div = document.getElementById("disDiv");

//得到层的子元素

var childList = div.childNodes;

//如果层有子元素,就删除第一个子元素

if(childList!=null && childList.length>0){

div.removeChild(childList[0]);

}

else{

alert("层中已经没有可以删除的子元素了!");

}

}

</script>

</head>

<body>

<center>

<div id="disDiv" style="text-align:center; border:1px solid blue; width:450px; padding:15px;">

<input type="button" value="button1" />

<input type="button" value="button2" />

<input type="button" value="button3" />

<input type="button" value="button4" />

</div>

<hr size="1" />

<input type="button" value="删除层中的元素" onClick="delEle()" />

</center>

</body>

</html>

运行上例,单击一次按钮,层中的按钮就会减少一个。单击两次按钮之后的效果如图3-24所示。

图3-24 删除网页元素

四、cookie

大家可能知道在document对象中有一个cookie 属性。但是cookie是什么呢?cookie就是所谓的缓存文件,也就是某些Web 站点在您的硬盘上用很小的文本文件存储了一些信息,这些文件就称为cookie。一般来说,cookie是CGI或类似比HTML 高级的文件、程序等创建的,但是JavaScript 也提供了对cookie 的很全面的访问权利。

每个cookie 都是这样的:<cookie名>=<值>。

<cookie名>的限制与JavaScript 的命名限制大同小异,只要你只用字母和数字命名,就完全没有问题了。<值>的要求也是“只能用可以用在URL 编码中的字符”。

每个cookie 都有失效日期,一旦电脑的时钟过了失效日期,这个cookie 就会被删掉。不能直接删掉一个cookie,但是可以用设定失效日期早于现在时刻的方法来间接删掉它。

每个网页或者说每个站点,都有它自己的cookie,这些cookie只能由这个站点下的网页来访问,来自其他站点或同一站点下未经授权的区域的网页,是不能访问的。每一“组”cookie有规定的总大小(大约2KB每“组”),一旦超过最大的总大小,则最早失效的cookie会先被删除,以便让新的cookie“安家”。

现在我们来学习使用document.cookie 属性。

如果直接使用document.cookie 属性,或者说用某种方法(如给变量赋值)来获得document.cookie 的值,就可以知道在现在的文档中有多少个cookie,每个cookie 的名字和它的值。例如,在某文档中添加“document.write(document.cookie)”,结果显示:

name=kevin; email=kevin@kevin.com; lastvisited=index.html

这意味着,文档包含三个cookie:name、email和lastvisited,它们的值分别是kevin、kevin@kevin.com和index.html。可以看到,两个cookie之间是用分号和空格隔开的,于是可以用“cookieString.split('; ')”方法得到每个cookie 分开的一个数组。

先用var cookieString = document.cookie,设定一个cookie 的方法,对document.cookie 赋值。与其他情况下的赋值不同,向document.cookie 赋值不会删除原有的cookie,而只会增添cookie 或更改原有cookie。赋值的格式如下:

document.cookie = 'cookieName=' + escape('cookieValue') + ';expires=' + expirationDateObj.toGMTString();

是不是看得头晕了呢?cookieName 表示cookie 的名称,cookieValue 表示cookie 的值,expirationDateObj 表示存储着失效日期的日期对象名,如果不需要指定失效日期,则不需要第二行。不指定失效日期,则浏览器默认是在关闭浏览器(也就是关闭所有窗口)之后过期。

首先,escape() 方法为什么一定要用?因为cookie 的值的要求是“只能用可以用在URL 编码中的字符”。知道了“escape()”方法是把字符串按URL 编码方法来编码的,那只需要用一个“escape()”方法来处理输出到cookie 的值,用“unescape()”来处理从cookie 接收过来的值就万无一失了。而且这两个方法的最常用途就是处理cookie。其实设定一个cookie 只用“document.cookie = 'cookieName=cookieValue'”这么简单,但是为了避免在cookieValue 中出现URL 里不准出现的字符,还是用一个escape()比较好。

然后,“expires”前面的分号,注意到就行了,是分号而不是其他。

最后,toGMTString() 方法,设定cookie 的失效日期都是用GMT 格式的时间的,其他格式的时间是没有作用的。

下面来实战一下。设定一个“name=rose”的cookie,在三个月后过期。

例3-20

var expires = new Date();

expires.setTime(expires.getTime() + 3 * 30 * 24 * 60 * 60 * 1000);

/* 三个月×一个月当做30天×一天24小时

×一小时60 分×一分60 秒×一秒1000 毫秒*/

document.cookie = 'name=redrose;expires=' + expires.toGMTString();

上面为什么没有用escape() 方法?这是因为知道redrose 是一个合法的URL 编码字符串,也就是说,redrose = escape('redrose')。一般来说,如果设定cookie 时不用escape(),那获取cookie 时也不用unescape()。

下面再编写一个函数,作用是查找指定cookie 的值。

例3-21

function getCookie(cookieName) {

var cookieString = document.cookie;

var start = cookieString.indexOf(cookieName + '=');

// 加上等号的原因是避免在某些cookie 的值里有

// 与cookieName 一样的字符串。

if (start == -1) // 找不到

return null;

start += cookieName.length + 1;

var end = cookieString.indexOf(';', start);

if (end == -1) return unescape(cookieString.substring(start));

return unescape(cookieString.substring(start, end));

}

这个函数用到了字符串对象的一些方法,如果你不记得了,请快去查查。这个函数所有的if 语句都没有带上else,这是因为如果条件成立,程序运行的都是return 语句,在函数里碰上return,就会终止运行,所以不加else 也没问题。该函数在找到cookie 时,就会返回cookie 的值,否则返回“null”。

现在要删除刚才设定的“name=redrose”cookie。

var expires = new Date();

expires.setTime(expires.getTime() - 1);

document.cookie = 'name=redrose;expires=' + expires.toGMTString();

可以看到,只需要把失效日期改成比现在日期早一点(这里是早1 毫秒),再用同样的方法设定cookie,就可以删掉cookie 了。

javascript之document对象的更多相关文章

  1. 用JAVA编写浏览器内核之实现javascript的document对象与内置方法

    原创文章.转载请注明. 阅读本文之前,您须要对浏览器怎样载入javascript有一定了解. 当然,对java与javascript本身也须要了解. 本文首先介绍浏览器载入并执行javascript的 ...

  2. JavaScript之document对象使用

    1.document 对象常用的有三种: A.document.getElementById:通过html元素的Id,来获取html对象.适用于单个的html元素. B.document.getEle ...

  3. Javascript的document对象

    对象属性 document.title                 //设置文档标题等价于HTML的<title>标签 document.bgColor               / ...

  4. javascript DOM document对象

    document对象代表整个html文档 用来访问页面所有元素最复杂的一个dom对象 也是window对象的一个子对象. 对于dom编程中,一个html就会当成一个dom树dom会把所有的html元素 ...

  5. JavaScript 之 document对象

    对象属性document.title //设置文档标题等价于HTML的title标签document.bgColor //设置页面背景色document.fgColor //设置前景色(文本颜色)do ...

  6. JavaScript 客户端JavaScript之Document对象中的表单和表单元素

    Form对象 代表一个HTML表单(document可以有多个表单元素) 表单访问 document.form[document.forms.length-1] 访问表单元素 document.for ...

  7. JavaScript Window.document对象

    一.找到元素: docunment.getElementById("id"):根据id找,最多找一个:    var a =docunment.getElementById(&qu ...

  8. Javascript之document对象用法(很重要)

    一.找到元素 document.getElementById("id"):根据id找层,最多找一个 var a=document.getElementById("id&q ...

  9. javascript中document对象的属性和方法

    document.documentElement; document.firstChild;document.childNodes[0];// 取得对<html>的引用document.b ...

随机推荐

  1. Java 多线程 (转)

    http://www.ibm.com/developerworks/cn/java/j-thread/index.html http://www.ibm.com/developerworks/cn/j ...

  2. Android ViewFlipper控件实例

    使用ViewFlipper实现两张图片切换效果,废话不多说,直接上代码. java源码: package com.example.viewflipper; import android.os.Bund ...

  3. Objective-C与C++的区别

    1.两者的最大相同:都是从C演化而来的面相对象语言,两者都兼容标准C语言 2.两者的最大不同:Objective-C提供了运行期动态绑定机制,而C++是编译静态绑定,并且通过嵌入类(多重继承)和虚函数 ...

  4. mybatis实战

    这篇教程不错,推荐:http://blog.csdn.net/techbirds_bao/article/details/9233599/

  5. iOS开发 判断用户是否开启了热点

    - (BOOL)achiveUserHotspotOpening { return [UIApplication sharedApplication].statusBarFrame.size.heig ...

  6. 为什么删不掉date模块

    显示是field pending deletion一看report里面的field list并没有xxx_date_xxx,只好跑到数据库才看到一个field_date_test当时并没有把这个字段当 ...

  7. Lua中点和冒号的区别

    在使用lua设计类时'.'和':'的区别主要在于使用'.'必须手动加self参数,使用':',可以隐藏这个参数,使用'.'调用使用':'定义的函数时,要注意,函数的第一个参数为self,如 funct ...

  8. Windows 位图

    目录 第1章简介    1 1.1 DFB    1 1.2 DDB    1 1.3 DIB    2 第2章相关API    3 2.1 创建    3 2.1.1 CreateCompatibl ...

  9. DispatcherServlet默认配置

    DispatcherServlet的默认配置在DispatcherServlet.properties(和DispatcherServlet类在一个包下)中,而且是当Spring配置文件中没有指定配置 ...

  10. C#中操作txt,抛出“正由另一进程使用,因此该进程无法访问此文件”

    将你的File.Create(fileName); //创建fileName路径的文本改为 1 2 3 using (FileStream fs = File.Create(fileName)){} ...