JavaScript的DOM操作

JavaScript的DOM操作

(一)DOM是文档对象模型,这种模型为树模型;文档是指标签文档;对象是指文档中每个元素;模型是指抽象化的东西。

(二)Windows对象操作

1.属性和方法

属性(值或者子对象):

子对象:history,location,document,status,menubar,toolbar等。

 

方法(函数)

opener:打开当前窗口的源窗口,如果当前窗口是首次启动浏览器打开的,则opener是null。

dialogArgument:对话框返回值。

事件(事先设置好的程序,被触发)。

 

2.Window.open(“第一部分”“第二部分”“第三部分”“第四部分”)

Window.open的特征参数:

第一部分:写页面地址;

第二部分:_blank打开的方式,在新窗口还是自身的窗口;

第三部分:控制打开的窗口格式,可以写多个,用空格隔开如下:

toolbar=no新打开的窗口无工具条;

menubar=no无菜单栏 status=no无状态栏;

width=100 height=100 宽度高度;

left=100打开的窗口距离左边多少距离;

resizable=no窗口大小不可调;

scrollbars=yes出现滚动条;

location=yes 有地址栏;

Window.open也有返回值,它的返回值是:新打开的窗口对象。

例如:最简单的打开窗口:window.open(“Untitled-1.html”);

打开一个窗口并保存在变量中:var w=window.open();

可以将打开的多个窗口保存在数组w里:

function openW()

{

w[i++]=window.open();

}

3.window.close();关闭当前窗口;

w.close();关闭保存在变量w中的那个窗口;

关闭多个子窗口:先将打开的窗口存入数组内,利用循环将其挨个关闭;

关闭打开当前窗口的源窗口:window.opener.close();

4.间隔与延迟

间隔执行一段代码(函数):window.setInterval(“要执行的代码”,间隔的毫秒数);

清除间隔执行:window.clearInterval(间隔的id);循环一次之后用来清除间隔执行的代码

延迟一段时间执行某一段代码(函数):window.setTimeout(“要执行的代码”,延迟的毫秒数);

清除延迟:window.clearTimeout(延迟的id);清除setTimeout

5.调整页面

window.resizeTo(宽,高);调整页面的宽度和高度;

window.scrollTo(x,y);滚动页面至哪里,y代表纵向滚动。

window.navigate(“url”)跳转至目标页面,在谷歌浏览器下有bug;

window.moveTo(x,y);移动页面至某一位置,位置由x和y决定;

6.模态对话框和非模态对话框

模态对话框(Modal Dialogue Box),是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。如单击【确定】或【取消】按钮等将该对话框关闭,它和非模态对话框都是永远置顶的,它们的区别在于当对话框打开时,是否允许用户进行其他对象的操作。

打开模态对话框:window.showModalDialog(“url”,”向模态对话框传的值”,“窗口特征参数”);

特征参数:用分号隔开,像素大小用px。dialogHeight,dialogWidth,center等

打开非模态对话框:window.showModalessDialog(“url”,”向模态对话框传的值”,“窗口特征参数”)

var a=window.dialogArgument;可以用一个参数来获取模态或非模态对话框传递的值。

传递的也可以是一个对象。

例题:

/*主网页*/
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
</body>
</html>
<script language="javascript">
var obj = new Object();
obj.name="51js";
window.showModalDialog("a.html",obj,"dialogWidth=200px;dialogHeight=100px");
</script>


/*模态对话框*/
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
</body>
</html>
<script language="javascript">
var obj = window.dialogArguments
alert("您传递的参数为:" + obj.name)
</script>

运行结果:

点击确定后

关闭模态窗口后才能对主窗口操作。

(三)Window.history对象

window.history.back();页面进行后退;

window.history.forward();页面前进;

window.history.go(n);n如果是正数则代表前进n个页面,n如果是负数则代表后退n个页面,一般常用这一种。

(四)window.location对象

location地址栏

var s=window.location.href;获取当前页面的地址

window.location.href=”http:www.baidu.com”修改页面地址,会跳转页面

window.location.hostname:主机名,域名,网站名,可用变量接收

window.location.pathname:路径名,可用变量接收

(五)window.status对象

status状态栏,可以给状态栏添加要显示的文字

window.status=”要在状态栏显示的内容”;设置状态栏文字

(六)window.document对象

1.找到元素:

(1)document.getElementByID(“id”);根据id找,最多找一个;

var a=document.getElementByID(“id”);将找到的元素放在变量中;

 

document.getElementsByName(“name”);根据name找,找出来的是数组;(用于表单元素)

document.getElementsByClassName(“name”);根据classname找,找出来的是数组;

document.getElementsByTagName(“name”);根据标签名找,找出来的是数组;

2.操作内容:

(1)给表单元素:

①获取内容:

alert(a.innerHTML);标签里的html代码和文字都获取了

alert(a.innerText);只取里面的文字

alert(a.outHTML);包括标签本身的内容(简单了解)

 

(注意:innerHTML等只能用于双标签,button等单表签不能使用)

例题:

②设置内容:

a.innerHTML=”<font color=red>hello world</font>”;引号里的格式设置有效,原先内容会被替换

a.innerText=””;引号内的内容当作字符串处理,原样呈现。

清空内容:赋值个空字符串。

⑵表单元素:

①获取内容,有三种获取方式:

用id获取

用Name

var t=document.fl.tl;      id为fl的form表单id为tl的元素

 

alert(t.value);

alert(t.innerHTML);获取<textarea>这里的值</textarea>

(innerHTML只能用于双标签)

②设置内容:t.value=”内容改变”;

 

一个小知识点:

<a herf=”www.baidu.com”onclick=”return false”>转向百度</a>;加了return false则不会跳转,默认是return true会跳转。按钮也一样,如果按钮中设置return false则不会进行提交,利用这个可以对提交跳转进行控制。

 

3.操作属性

首先利用元素的id找到该元素,存于一个变量中:

var a=document.getElementById(“id”);

然后可以对该元素的属性进行操作:

a.setAttribute(“属性名”,“属性值”);设置一个属性,添加或更改都可以,可以联想一下C#中设置类的属性;

a.getAttribute(“属性名”);获取属性的值;

a.removeAttribute(“属性名”);移除一个属性。

例题:做一个问题,如果输入的答案正确则弹出正确,错误弹出错误;

这里给text里面设置了一个daan属性,里面存了答案,点击检查答案的时候check输入的内容和答案是否一样。

<body>
<form>
中华民国成立于那一年?
<input type="text" daan="1912年" value="" id="t1" name="t1"/>
<input type="button" onclick="check()" id="t2" value="检查答案"/>

</form>
</body>
</html>

<script language="javascript">

function check()
{
    //注意,如果将下面前两行代码写在函数外面,则c的值会一直为空,在调用函数时(填写文本框后),c才能取到文本框内输入的值,
    var a=document.getElementById("t1");
    c=a.value;d=a.daan;
    if (c==d)
    {
        alert("正确");}
    else
    {
        alert("错误");}

}

</script>

 

4.操作样式

样式为CSS中的样式,所有的样式都可以用代码进行操作。

首先利用元素的id找到该元素,存于一个变量中:

var a=document.get#lementById(“id”);

然后可以对该元素的属性进行操作:

a.style.样式=“”;操作此id元素样式的属性。

document.body.style.backgroundColor="颜色";整个窗口的颜色。

例题:展示图片的自动和手动切换

 

<style type="text/css">
.show{
    width:201px;
    height:178px;
    background-color:#0F3;
    background-image:url(img/1.png);
    }
.page{
    width:40px;
    height:30px;
    background-color:#FC0;
    }
.page1{
    float:left;
    position:relative;
    top:70px;}
.page2{
    float:right;
    position:relative;
    top:70px;}

</style>
</head>

<body>
<div class="show" id="show">
    <div class="page page1"  onclick="diyUp()">上页</div>
    <div class="page page2"  onclick="diyDown()">下页</div>
</div>
</body>
</html>

<script language="javascript">
var pic=new Array();
pic[0]="url(img/1.png)";
pic[1]="url(img/2.png)";
pic[2]="url(img/3.png)";
//用id获取普通标签
var show=document.getElementById("show");
n=0;m=0;

//自动换图
function autoChange()
{
    if (m==0)
    {
    
        n++;
        
        if(n<=2)
        {
        show.style.backgroundImage=pic[n];}
        else
        {
            n=0;
            show.style.backgroundImage=pic[n];
            }    
        
        window.setTimeout("autoChange()",3000);
    }
}
    
    window.setTimeout("autoChange()",3000);

//手动换图 换上一张
function diyUp()
{
    m=1;
    n--;
    if(n>=0)
    {
        show.style.backgroundImage=pic[n];
    }
    else
    {
        n=2;
        show.style.backgroundImage=pic[n];
    }
    
}
//换下一张
function diyDown()
{
    m=1;
    n++;
    if(n<=2)
    {
        show.style.backgroundImage=pic[n];
    }
    else
    {
        n=0;
        show.style.backgroundImage=pic[n];
    }
}
</script>

5.相关元素操作

var a=document.getElementById(“id”);找到a

var b=a.nextSibling;     找a的下一个同辈元素,注意包含空格;

var b=a.previousSibling,找a的上一个同辈元素,注意包含空格;

var b=a.parentNode,找a的上一个父级元素;

var b=a.childNodes;     找出来的是数组,找a的下一级子元素;

var b=a.firstChild;    第一个子元素,lastChild最后一个,childNodes[n]找第几个

alert(nodes[i] instanceof Text);判断是不是文本,是则返回true,不是返回false,用if判断它的值是不是false,可以去除空格。

6.元素的创建、添加、删除:

var a=document.getElementById(“id”);找到a;

创建:var obj=document.createElement(“标签名“);创建一个元素

obj.innerHTML=”hello world”;添加的时候首先需要创建出一个元素。

添加:a.appendChild(obj);向a中添加一个子元素。

a.removeChild(obj);删除一个子元素。

列表中a.selectIndex:选中的是第几个;a.options[a.selectIndex]按下标取出第几个option对象

7.字符串的操作

var s=new String();或var s=”aaaa”;

var s=”hello world”;

alert(s.toLowerCase());转小写      toUpperCase()转大写

alert(s.substring(3,8));从第三个位置截取到第八个位置

alert(s.substr(3,8));从第三个位置开始截取,截取八个字符长度,不写后面的数字是截到最后。

s.split(‘’);将字符串按照指定的字符拆开

s.length是属性

s.indexOf(“wordl”);world在字符串中第一次出现的位置,没有返回-1

s.lastIndexOf(“o”);o在字符串最后一次出现的位置

8.日期时间的操作

var d=new Date();当前时间

var d=new Date(1999,3,2);定义一个时间,1999年4月2日,3要加1

d.getFullYear:取年份;d.getMonth():取月份,取出来的少1;d.getDate():取天;d.getDay();取星期几

d.getHours():取小时;d.getMinutes();取分钟;d.getSecond();取秒;d.setFullYear():设置年份,设置月份的时候注意加1。

9.数学函数的操作

Math.ceil();大于当前小数的最小整数

Math.floor();小于当前小数的最大整数

Math.sqrt();开平方

Math.round();四舍五入

Math.random();随机数,0-1之间

小知识点:外面双引号,里面的双引号改为单引号;

在div里面行高设置和整个外面高度一样,才能用数值居中,居中是行居中。

文本框取出来的值是字符串,需要用parseint()转化为数字

s.match(reg);s代表一个字符串,reg代表一个字符串,两者进行匹配,如果两个字符串不匹配,返回一个null。

 

四、表单验证和事件

㈠表单验证

1.非空验证(去空格)

2.对比验证(跟一个值对比)

3.范围验证(根据一个范围进行判断)

4.固定格式验证:电话号码,身份证号,邮箱,信用卡号等的验证;需要用到正则表达式来进行验证。

5.其它验证

㈡正则表达式

用符号来描述书写规则:/中间写正则表达式/

^:匹配开头,$:匹配结尾;/^e/以ve开头的/ve$/以ve结尾

\d:一个任意的数字

\w:一个任意的数字或字母

\s:任意字符串

{n}:把左边的表达式重复n遍

{m,n}:把左边的表达式重复至少m遍,至多n遍

{m,}把左边的表达式重复至少m遍,至多不限

+:左边的表达式,至少出现一次,至多不限,相当于{1,}

*:左边的表达式,至少出现0次,至多不限,相当于{0,}

?:左边的表达式,至少出现0次,至多出现1次,相当于{0,1}

[a,b,c]:只能取方括号中内容之一

[a-z]或[1-9]:在范围中取其一       [a-z,A-Z]

|:代表或者;():优先级\:转义—“\(\)”这个才是要出现的小括号,需要转义

㈢事件

事件有三要素:事件源、事件数据、事件处理程序

事件冒泡:当元素嵌套的时候,内部元素激发某个事件后,默认情况下外部元素相应的事件也会跟着依次触发可以加return false:是阻止默认操作

onclick:鼠标单击触发

ondbclick:双击触发

onmouseover:鼠标移动上面触发

onmouseout:鼠标离开时触发

onmousemove:鼠标在上面移动时触发

onchange:只要内容改变触发

onblur:失去焦点时触发

onfocus:获得焦点时触发

onkeydown:按键按下的时候触发

onkeyup:按键抬起来的时候触发

onkeypress:事件在用户按下并放开任何字母数字键时发生。但是系统按钮(例如:箭头键、功能键)无法得到识别。

例子:根据正则表达式验证邮箱

function checkmail()

{

var v4=trim(u4.value);

var reg=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;

if(v4.match(reg)!=null)

{

imgs4.setAttribute(“src”,”imges/1.png”);

return true;

}

 

else

{

imgs4.setAttrinbute(“src”,”imges/2.png”);

return false;

}

 

常用正则表达式

 

正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。

匹配中文字符的正则表达式: [\u4e00-\u9fa5] 
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了

匹配双字节字符(包括汉字在内):[^\x00-\xff] 
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

匹配空白行的正则表达式:\n\s*\r 
评注:可以用来删除空白行

匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? /> 
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

匹配首尾空白字符的正则表达式:^\s*|\s*$ 
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 
评注:表单验证时很实用

匹配网址URL的正则表达式:[a-zA-z]+://[^\s]* 
评注:网上流传的版本功能很有限,上面这个基本可以满足需求

匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 
评注:表单验证时很实用

匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7} 
评注:匹配形式如 0511-4405222 或 021-87888822

匹配腾讯QQ号:[1-9][0-9]{4,} 
评注:腾讯QQ号从10000开始

匹配中国邮政编码:[1-9]\d{5}(?!\d) 
评注:中国邮政编码为6位数字

匹配身份证:\d{15}|\d{18} 
评注:中国的身份证为15位或18位

匹配ip地址:\d+\.\d+\.\d+\.\d+ 
评注:提取ip地址时有用

匹配特定数字: 
^[1-9]\d*$ //匹配正整数 
^-[1-9]\d*$ //匹配负整数 
^-?[1-9]\d*$ //匹配整数 
^[1-9]\d*|0$ //匹配非负整数(正整数 + 0) 
^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0) 
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数 
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数 
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数 
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点数 + 0) 
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮点数(负浮点数 + 0) 
评注:处理大量数据时有用,具体应用时注意修正

匹配特定字符串: 
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串 
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串 
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串 
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串 
^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串 
评注:最基本也是最常用的一些表达式

 

 

 

 

 

 

 

 

}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。