DOM基础知识点记录

dom参考手册

一、DOM简介

  • DOM就是HTML页面的模型,将每个标签都作为一个对象。
  • javascript通过调用DOM中的属性、方法就可以对网页中的文本框、层等元素进行编程控制。
  • 比如通过操作文本框的DOM对象,就可以读取文本框中的值、设置文本框中的值。
  • javascript->Dom相当于C#->.Net Framwork。
  • CSS+javascript+DOM=DHTML。

二、事件

2.1、直接写到标签中

例如:<body onmousedown="alert('点击');alert('哈哈')">

2.2、有时事件响应的代码太多,就放到单独的函数中

例如:

<script type="text/javascript">
function bodymousedown(){
    alert("网页被点坏了!");
    alert("呵呵");
}
</script>
<body onmousedown="bodymousedown()">

注意:bodymousedown后的括号不能丢,表示调用bodymousedown函数。

2.3、动态设置事件

例如:

<script type="text/javascript">
function f1(){
    alert("我是f1");      
}
function f2(){
    alert("我是f2");      
}
</script>
<body >
<!--注意这里f1后面不能加括号-->
<input type="button" onclick="document.ondblclick=f1" value="关联事件1"/>
<input type="button" onclick="document.ondblclick=f2" value="关联事件2"/>
</body>

2.4、其他事件

  • onload:网页加载完毕时触发,浏览器是一边下载文档、一边解析执行,可能会出现Javascript执行时需要操作某个元素,而这个元素还没有加载,如果这样就要把操作代码放到body的onload事件中,或者可以把javascript放到元素之后。元素的onload事件是元素自己加载完成时触发,body onload才是全部加载完成。
  • onunload:网页关闭(或者离开)后触发。
  • onbeforeunload:在网页准备关闭(或者离开)时触发。

用法:在事件中为window.event.returnValue赋值(要显示的警告消息),这样窗口离开(比如前进、后退、关闭)就会弹出确认消息。
例如:

<body onbeforeunload="window.event.returnValue='真的要放弃发帖退出吗?'">
onbeforeunload
onbeforeunload
  • 通用的HTML元素的事件:onclick(单击)、ondbclick(双击)、onkeydown(按键按下)、onkeypress(点击按键)、onkeyup(按键释放)、onmousedown(鼠标按下)、onmousemove(鼠标移动)、onmouseout(鼠标离开元素范围)、onmouseover(鼠标移动到元素范围)、onmouseup(鼠标按键释放)等。

三、Window对象

window对象代表当前窗口,使用window对象的属性、方法的时候可以省略window。
例如:window.alert('a')可以省略成alert('a')

3.1、confirm方法

显示“确定”、“取消”对话框,如果按了【确定】按钮,就返回true,否则返回【false】。

例如:

<script type="text/javascript">
function confirmtest(){
    if (confirm("是否继续")) {
        alert("继续");
    }
    else{
        alert("取消");
    }
}
</script>
<body > 
<input type="button" onclick="confirmtest()" value="confirm测试" />   
</body>

3.2、navigate方法

导航到指定的地址。

例如:

<input type="button" onclick="navigate('http://www.cnblogs.com/liujf5566')" value="navigate测试" />

3.3、setInterval方法

  • 每隔一段时间执行指定的代码。第一个参数为代码字符串,第二个参数为间隔时间(单位毫秒),返回值为定时器的标识。

例如:setInterval("alert('hello')",5000)

  • clearInterval取消setInterval的定时执行,相当于Timer中的Enabled=false。因为setInterval可以设定多个定时,所以clearInterval要指定清楚那个定时器的标识,即setInterval的返回值。

例如:

var intervalld= setInterval("alert('hello')",5000);
clearInterval(intervalld );
  • Demo-跑马灯效果
跑马灯
跑马灯
    <script type="text/javascript">
    function rool(){
        var title=document.title;
       var firstchar=title.charAt(0);
       var leftoverchar=title.substring(1,title.length);
      document.title=leftoverchar+firstchar;
    }
  setInterval("rool()",500);
  </script>  
  <!--使用控制-->
 <!--注意这里每点击一次都会创建一个新的定时器;所以点击次数越多,滚动的就越快。-->
<input type="button" value="滚动" onclick="timeId=setInterval('rool()',500)"/>
<!--停止-->
<input type="button" value="停止" onclick="clearInterval(timeId)"/>

3.4、location属性

重新导向新的地址,和navigate方法效果一样。window.location.reload刷新页面。
例如:window.location.href=http://www.cnblogs.com/liujf5566

3.5、event属性

window.event是非常重要的属性,用来获得发生事件的消息,事件不局限于window对象的事件,所有元素的事件都可以通过event属性取到相关信息,类似于winform中的e(EventAgr)。

3.6、 altKey属性

bool类型,表示发生事件时alt键是否被按下,类似的还有ctrlKey、shiftKey属性。
例如:

`<input type="button" value="点击" onclick="if(event.ctrlKey){alert('Ctrl点击')}else{alert('普通点击')}" />`  

3.7、坐标相关的属性

clientX、clientY发生事件时鼠标在客户区域的坐标;screenX、screenY发生事件时鼠标在屏幕上的坐标;offsetX、offsetY发生事件时鼠标相对于事件源(比如点击按钮时触发onclick)的坐标。

3.8、 returnValue属性

如果将returnValue设置为false,就会取消默认事件的处理。例如:在超链接的onclick里面禁止访问href的页面;在表单校验的时候禁止提交表单到服务器。

例如:

<a href="http://www.baidu.com" onclick="alert('禁止访问!');window.event.returnValue=false ">百度</a>
<form action="a.aspx">
<input type="submit" value="提交" onclick="alert('数据有问题,禁止提交!');window.event.returnValue=false;"/>
</form>

3.9、screen属性

屏幕的信息

3.10、 clipboardData属性

对粘贴板的操作。
clearData("Text")清空粘贴板;getData("Text")读取粘贴板的值,返回值为粘贴板中的内容;setData("Text",val)设置粘贴板中的值。

例如:

<input type="button" value="分享本页给好友" onclick="clipboardData.setData('Text','我发现一个好玩的网址,很黄很暴力!'+location.href);alert('已经将地址放到粘贴板中,赶快通过QQ粘贴给你的好友吧!');" />

:当复制的时候body的oncopy方法被触发,直接return false就是禁止复制。
例如:<body oncopy="alert('禁止复制!');return false">。禁止粘贴也一样。很多元素也有oncopy、onpaste事件。

在网页中复制文章的时候,为防止那些拷贝党不添加文章来源,自动在复制的内容后添加版权声明。
例如:

<script type="text/javascript">
function modifyClipboard(){
clipboardData.setData('Text',clipboardData.getData('Text')+'本文来自XX博客技术专区,转载请注明来源。'+location.href);
}
</script>
<body oncopy="setTimeout('modifyClipboard',100)">

:不能直接在oncopy中执行对粘贴板的操作,因此设定定时器0.1秒后执行,这样就不再oncopy的执行调用栈上了。100ms只是一个经常取值,写1000、10、50、200...都行。

3.11、history属性

history操作历史记录。
window.history.back()后退;window.history.forward前进。也可以用window.history.go(-1)window.history.go(1)

例如:

<a href="javascript:window.history.back()">后退</a>
<input type="button" value="后退" onclick="window.history.back()">

3.12、document属性

document是window对象的一个属性,因为使用window对象成员的时候可以省略window.,所以一般直接写document。

document的方法

  • write:向文档中写入内容。writeln,和write差不多,只不过最后添加一个回车。

: 在onclick等事件中写的代码会冲掉页面中的内容,只有在页面加载过程中write才会与原有内容融合在一起。

例如:

<!--onclick事件中写入,会冲掉页面内容-->
<input type="button" value="点击" onclick="document.write('<font color=red>你好</font>');"/>
<!--页面加载过程中写入-->
<script type="text/javascript">
document.write("<a href='http://www.baidu.com'>百度</a>");
</script>

write经常在广告代码、整合资源代码中被使用。

  • getElementById:根据元素的id获得对象,网页中id不能重复。
    也可以直接通过元素的id来引用元素,但是有有效范围之类的问题,因此不建议直接通过id操作元素,而是通过getElementById。

  • getElementsByName:根据元素的name获得对象,由于页面中元素的name可以重复,比如多个RadioButton的name一样(属于一个组),因此getElementsByName返回值是对象数组。

例如:

<head>
<script type="text/javascript">
function btnClick(){
    var radios=document.getElementsByName("gender");
    for (var i = 0; i < radios.length; i++) {           
        alert(radios[i].value);
    };
}
</script>
</head>
<body>
<input type="radio" name="gender" value="男"/>男
<input type="radio" name="gender" value="保密"/>保密
<input type="radio" name="gender" value="女"/>女
<input type="button" value="click" onclick="btnClick()"/>
</body>
  • getElementsByTagName:获得指定标签名称的元素数组。
    比如getElementsByTagName("p")可以获得所有<p>标签。

列如:

/*将所有input标签的元素赋值为"hello"*/
function btnClick(){
    var inputs=document.getElementsByTagName("input");
    for (var i = 0; i < inputs.length; i++) {           
        inputs[i].value="hello";
    };
}

四、Demo

4.1、改变被点击按钮的内容

改变按钮内容
改变按钮内容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>改变被点击的控件的内容为"呜呜"</title> 
<script type="text/javascript">
/*为控件初始化事件*/    
function initEvent(){
    var inputs=document.getElementsByTagName("input");
    for (var i = 0; i < inputs.length; i++) {
        var input= inputs[i];
        input.onclick=btnClick;
    }
}
/*按钮点击事件*/
function btnClick(){
    var inputs=document.getElementsByTagName("input");
    for (var i = 0; i < inputs.length; i++) {
        var input= inputs[i];
        //window.event.srcElement取得引发事件的控件
        if (input==window.event.srcElement) {
            input.value="呜呜";
        }
        else{
            input.value="哈哈";
        }
    }
}
</script>
</head>
<body onclick="initEvent()">
<input type="button" value="哈哈" />
<input type="button" value="哈哈" />
<input type="button" value="哈哈" />
<input type="button" value="哈哈" />
</body>
</html>

4.2、注册表单倒数

注册表单倒数
注册表单倒数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册</title>
<script type="text/javascript">
var leftSecond=10;
var intervalId;
function countDown(){
    var btnReg=document.getElementById("btnReg");
    //如果网页速度非常慢的话,可能定时器运行的时候控件还没有加载!
    if (btnReg) {   
        if (leftSecond <=0 ) {      
            btnReg.value="同意";
            btnReg.disabled=false;
            clearInterval(intervalId);//停止计时器
        }       
        else{
            btnReg.value="请仔细阅读协议(还剩"+ leftSecond + "秒)";
            leftSecond--;
        }
    }
}
intervalId=setInterval("countDown()",1000);
</script>
</head>
<body>
<textarea>协议内容!!!</textarea>
<!--初始化时控件不可用-->
<input id="btnReg" type="button" value="同意"  disabled="disabled" />
</body>
</html>

4.3、加法计算器

加法计算器
加法计算器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>加法计算器</title>
<script type="text/javascript">
function add () {
    var value1=document.getElementById("txt1").value;
    var value2=document.getElementById("txt2").value;
    //转换成10进制数字
    value1=parseInt(value1,10);
    value2=parseInt(value2,10);
    document.getElementById("txtResult").value=value1+value2;
}
</script>
</head>
<body>
<input type="text" id="txt1"/>+<input type="text" id="txt2" />
 <input type="button" value="=" onclick="add()">
 <input type="text" id="txtResult" readonly="readonly" />
</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • 之前通过深入学习DOM的相关知识,看了慕课网DOM探索之基础详解篇这个视频(在最近看第三遍的时候,准备记录一点东西...
    微醺岁月阅读 4,380评论 2 62
  • 一、JS前言 (1)认识JS 也许你已经了解HTML标记(也称为结构),知道了CSS样式(也称为表示),会使用HT...
    凛0_0阅读 2,721评论 0 8
  • 第1章 认识JS JavaScript能做什么?1.增强页面动态效果(如:下拉菜单、图片轮播、信息滚动等)2.实现...
    mo默22阅读 1,171评论 0 5
  • 第1章 系好安全带,准备启航 1.1让你认识JS 1.1.1 JavaScript能做什么?增强页面动态效果(...
    张中华阅读 1,297评论 4 10
  • 一个公司的发展,如果不是聚焦打造好自己的产品,而是把时间花在诽谤同行或竞争对手上,那这家公司肯定无法做大,也不会长...
    般若无相阅读 84评论 0 0