javascriptdom对象,BOM对象
javascriptdom对象,BOM对象
@author:杜勇帅
@email:820482874@qq.com
6DOM对象
1元素节点对象
1.DOM树介绍 节点(Node):HTML文档中的所有内容都可以称之为节点 包含【元素节点、属性节点、文本节点】、注释节点和文档节点。 文档(Document):就是指HTML或者XML文件。 元素(Element):HTML文档中的标签可以称为元素。 2.获取元素节点 a)通过标签名获取元素节点 语法:document.getElementsByTagName("标签名"); 返回值:返回符合条件的元素节点集合!集合中的每个元素才是元素节点对象! b)通过class获取元素节点 语法:document.getElementsByClassName("class属性值"); 返回值:返回符合条件的元素节点集合!集合中的每个元素才是元素节点对象! c)通过id获取元素节点 语法:document.getElementById("id属性值"); 返回值:返回符合条件的元素节点对象。 补充1:在同一个文档中,id属性值不能相同。 补充2:CSS选择器使用最多的是:class选择器。 js选中文档中符合条件的元素节点,常见使用:id选择器 原因:1)效率高! 2)js开发中,更常见的是直接获取某一个元素节点对象,而不是元素节点集合
注意:目前我们所学的获取元素节点,都是基于从整个html文档中来找符合条件的元素。 document对象代表的就是html文档,document也是window对象的一个属性! document == window.document
<h1 class="box">我是一个h1标签</h1>
<strong>我是一个strong标签</strong>
<p class="box">我是一个段落标签1</p>
<div>我是一个div标签</div>
<p id="box">我是一个段落标签2</p>
<script>
// 3.通过id获取元素节点
var box = document.getElementById("box");
box.style.backgroundColor = "red";
/*// 2.通过class获取元素节点
var arr = document.getElementsByClassName("box");
for(var i = 0; i < arr.length; i++) {
arr[i].style.backgroundColor = "yellow";
// 需求:通过标签来选中文档中所有符合条件的p标签,然后给p标签添加背景颜色
// 1.通过标签名获取元素节点集合
var arr = document.getElementsByTagName("p");
// 2.通过循环,获取元素节点集合中的每一个元素节点
for(var i = 0; i < arr.length; i++) {
// arr[i],获取到arr集合中的每一个元素节点对象
// 添加背景颜色语法:元素节点.style.backgroundColor = "颜色值";
// 3.给每一个元素节点对象添加背景颜色
arr[i].style.backgroundColor = "yellow";
</script>
2入口函数
script标签位置:body和head 如果一定要在head的script标签中获取元素节点,该如何实现呢??? 解决:使用入口函数!
入口函数: 作用:等待文档中的标签和内容全部加载完毕之后,在来执行入口函数中的代码! 语法:window.onload = function() { // 书写js代码! } 注意点:一个文档中,最多只能有一个入口函数。
强调:如果script标签在head中,并且在script中需要获取某个元素节点,那么必须在入口函数中来执行获取操作! 如果script标签在body中,那么script标签必须在body标签内部的最后面,这样才不需要入口函数 否则依旧需要入口函数
<script>
window.onload = function () {
/*var box = document.getElementById("box");
box.style.backgroundColor = "red";*/
console.log("第一个入口函数");
</script>
</head>
<h1 class="box">我是一个h1标签</h1>
<strong>我是一个strong标签</strong>
<p class="box">我是一个段落标签1</p>
<div>我是一个div标签</div>
<p id="box">我是一个段落标签2</p>
<a href="04.document文档.html">进入document文档网页</a>
<script>
var box = document.getElementById("box");
box.style.backgroundColor = "red";
</script>
3单击事件
事件三要素: 事件源:响应事件的元素节点 事件:事件元素需要触发的事件,例如:单击事件、鼠标键事件、焦点事件等等 事件驱动程序:响应事件需要做的操作。
onclick -->单击事件
注意事项: 1)事件的匿名函数体中,this指的就是“事件源” 2)什么时候响应单击事件?? 点击单击事件源的时候响应,如何响应?浏览器会执行:事件源.onclick(); 如果想要手动触发某个元素的的单击事件,该如何实现??? 手动调用:事件源.onclick(); 3)取消事件源绑定的事件。 实现方式:事件源.onclick = null;
window.onload = function () {
// 1.获取事件源
var btn = document.getElementById("btn");
// 2.给事件源添加单击事件
btn.onclick = function () {
console.log("btn响应单击事件");
// console.log(this); // 此处this指的就是btn,也就是事件源
// 3.在函数体中,就是书写事件驱动程序
this.style.backgroundColor = "yellow";
// btn.onclick(); // 手动触发单击事件
// 需求:点击“#btn1”按钮,要求解除“#btn”的单击事件
var btn1 = document.getElementById("btn1");
btn1.onclick = function () {
console.log("btn1响应单击事件");
// 取消“#btn”的单击事件
btn.onclick = null;
</script>
</head>
<!-- 需求:点击按钮,要求吧按钮的背景颜色设置为黄色 -->
<button id="btn">单击按钮</button>
<button id="btn1">取消btn的单击事件</button>
</body>
4document文档
<head>
<meta charset="UTF-8">
<title>武汉尚学堂官网</title>
</head>
<a href="#">百度一下1</a>
<a href="#">百度一下2</a>
<a href="#">百度一下3</a>
<a href="#">百度一下4</a>
<img src="img/27125326.jpg" alt="">
<img src="img/27125326.jpg" alt="">
<img src="img/27125326.jpg" alt="">
<img src="img/27125326.jpg" alt="">
<form action="#"><input type="text"></form>
<form action="#"><input type="text"></form>
<form action="#"><input type="text"></form>
<form action="#"><input type="text"></form>
<script>
// document文档---获取元素节点
// 获取文档中的 body元素
// console.log(document.body);
// 获取文档中的的所有超链接
// console.log(document.links);
// 获取文档中的的所有图片标签
// console.log(document.images);
// 获取网页中所有的图片
/*for(var i = 0; i < document.images.length; i++) {
var img = document.images[i];
// 获取img元素节点的src属性值
// 语法:元素节点.src
console.log(img.src);
// 获取文档中的的所有form标签
// console.log(document.forms);
// 获取文档中的所有元素
// console.log(document.all);
// 等效于:document.getElementsByTagName("*");
/*var elements = document.getElementsByTagName("*");
console.log(elements);*/
// document文档---document其他操作
// 返回当前页面存放的cookie值
console.log(document.cookie);
// 返回的就是当前网页的域名。
console.log(document.domain);
// 返回当前<title>标签里面的内容
console.log(document.title);
// 返回当前页面的全地址。
console.log(document.URL);
// 解码
var decode = decodeURI(document.URL);
console.log(decode);
// 返回当前页面是从哪个一页面跳转过来的。
console.log(document.referrer);
console.log(decodeURI(document.referrer));
</script>
5获取from表单元素
<script>
window.onload = function () {
// 1.获取form元素节点
// 语法:document.form元素的name属性值
var form = document.login;
// 2.获取表单域元素节点和表单按钮元素节点
// 语法:form元素节点.name属性值
var userName = form.userName;
var password = form.password;
var submit = form.submit;
console.log(userName);
console.log(password);
console.log(submit);
</script>
</head>
<form action="" name="login">
用户名:<input type="text" name="userName"> <br>
密码:<input type="password" name="password"> <br>
<input type="submit" value="登录" name="submit">
</form>
</body>
6单机事件
事件三要素: 事件源:响应事件的元素节点 事件:事件元素需要触发的事件,例如:单击事件、鼠标键事件、焦点事件等等 事件驱动程序:响应事件需要做的操作。
onclick -->单击事件
该方式的事项步骤: 1.给标签添加onclick属性,属性值为响应事件之后需要执行的函数。 明确了事件源和事件 2.声明一个函数,该函数名需要和onclick的属性值中调用的方法名保持一致。 在函数中,就可以书写事件驱动程序。 注意:该方式不被W3C推荐使用,原因:事件三要素不明确;无法实现内容和js相分离
注意事项: 1.给响应事件的函数传递事件源。 a)onclick="myClick(this);" 调用函数时,传递实参this。 b)function myClick(_this) {} 使用形参_this来接收实参this 2.响应单击事件的函数名不能命名为click,建议方法名取名见名知意。 3.响应单击事件的函数,只能为全局函数,不能是局部函数!
<script>
function myClick(_this) {
_this.style.backgroundColor = "yellow";
console.log("单击事件");
</script>
</head>
<!-- 需求:点击按钮,要求吧按钮的背景颜色设置为黄色 -->
<!-- onclick属性,代表给元素添加一个单击事件-->
<!-- onclick属性值,该属性值就是设置响应单击事件之后需要执行的方法 -->
<button id="btn" onclick="myClick(this);">单击按钮</button>
</body>
2.DOM文本和属性节点
1.内容节点(文本节点) innerHTML:设置或获取元素的文本内容(普通文本和html标签) innerText: 设置或获取元素的文本内容(普通文本) 注意:innerHTML是所有浏览器都支持的 innerText是IE浏览器和chrome浏览器支持的,旧版本的Firefox浏览器不支持。
<script>
window.onload = function () {
var btn1 = document.getElementById("btn1");
var box = document.getElementById("box");
btn1.onclick = function () {
// 1.设置文本内容
// box.innerHTML = "我是一个h1标签";
box.innerHTML = "<ul>\
<li>武汉</li> \
<li>重庆</li> \
<li>上海</li> \
<li>北京</li> \
</ul>";
// 2.获取文本内容
console.log(box.innerHTML);
var btn2 = document.getElementById("btn2");
btn2.onclick = function () {
// 1.设置文本内容
// box.innerText = "我是一个h1标签";
box.innerText = "<ul>\
<li>武汉</li> \
<li>重庆</li> \
<li>上海</li> \
<li>北京</li> \
</ul>";
// 2.获取文本内容
console.log(box.innerText);
</script>
</head>
<h1 id="box">我是一个标题标签</h1>
<button id="btn1">innerHTML</button>
<button id="btn2">innerText</button>
</body>
2.属性节点
属性节点操作方式: 1.当成普通js对象来操作属性 点语法:元素节点.属性名 中括号法:元素节点["属性名"]
<script>
window.onload = function () {
var image = document.getElementById("image");
// 获取属性
var btn1 = document.getElementById("btn1");
btn1.onclick = function () {
console.log(image.src); // 完整路径
console.log(image["title"]);
console.log(image.alt);
// 设置属性
var btn2 = document.getElementById("btn2");
btn2.onclick = function () {
image.src = "img/aa.jpg";
image["title"] = "美女";
</script>
</head>
<img src="img/27125326.jpg" alt="图片加载失败" title="小猴子" id="image">
<button id="btn1">获取属性</button>
<button id="btn2">设置属性</button>
2.使用DOM提供的方法来操作属性 获取属性 语法:元素节点.getAttribute("属性名"); 设置属性 语法:元素节点.setAttribute("属性名", "属性值"); 判断某个属性是否存在 语法:元素节点.hasAttribute("属性名"); 如果存在该属性,则返回ture,否则返回false 删除属性 语法:元素节点.removeAttribute("属性名");
<script>
window.onload = function () {
var image = document.getElementById("image");
// 获取属性
var btn1 = document.getElementById("btn1");
btn1.onclick = function () {
console.log(image.getAttribute("src")); // 单存的属性值
console.log(image.getAttribute("title"));
console.log(image.getAttribute("alt"));
// 设置属性
var btn2 = document.getElementById("btn2");
btn2.onclick = function () {
image.setAttribute("src", "img/aa.jpg");
image.setAttribute("title", "大美女");
// 删除属性
var btn3 = document.getElementById("btn3");
btn3.onclick = function () {
// 1.判断该属性是否存在
if(image.hasAttribute("title")) {
// 2.如果存在,则进行删除操作
image.removeAttribute("title");
</script>
</head>
<img src="img/27125326.jpg" alt="图片加载失败" title="美猴王" id="image">
<button id="btn1">获取属性</button>
<button id="btn2">设置属性</button>
<button id="btn3">删除属性</button>
</body>
3.使用className属性来操作class属性(为第一种方式的补充) 第一种方式,无法获取或设置class属性 如果一定要使用点语法或中括号法来操作class属性,那么必须使用className来操作 使用className的注意点: 设置className属性值的时候,做的是覆盖操作!
第二种方式,可以获取或设置class属性 操作class值的时候,也是做的覆盖操作!
<script>
window.onload = function () {
var box = document.getElementById("box");
var btn1 = document.getElementById("btn1");
var btn2 = document.getElementById("btn2");
btn1.onclick = function () {
console.log("className:" + box["className"]);
btn2.onclick = function () {
// box.className = "box3"; // 覆盖操作
// 需求:要求保留以前的class值,并且新增一个class值
// box.className = box.className + " box3";
box.setAttribute("class", box.getAttribute("class") + " box3");
</script>
</head>
<h1 class="box1 box2" id="box">我是一个标题标签</h1>
<button id="btn1">获取class属性值</button>
<button id="btn2">设置class属性值</button>
</body>
3.DOM样式和节点操作
1.样式操作 在js中所学的样式操作都只能操作行内样式,如果想要操作选择器中的样式要等到jQuery在学习 获取样式 获取单个样式 语法:元素节点.style.样式名 注意:样式名统一采用小驼峰命名法则。 设置样式 设置单个行内样式 语法:元素节点.style.样式名 = "样式值"; 注意:a)样式名统一采用小驼峰命名法则。 b)如果“样式值”为数值型,那么可以使用双引号或单引号包裹,也可以不包裹 如果“样式值”不是数值型,必须用双引号或单引号包裹 建议:样式值统一采用双引号或单引号包裹。 设置多个行内样式 语法:元素节点.style.cssText = "样式名1: 样式值1; 样式名2: 样式值2; ..."; 例如:box.style.cssText = "background-color: red; opacity: 1; width : 400px;"; 注意:a)设置的多条样式,样式名单词之间采用减号(-)链接 b)多条样式值的规则,和选择器(或style属性值)中的规则一模一样。
补充:建议样式的操作,最好使用CSS来实现。原因:效率高!!! 实现步骤: 1)给需要添加样式的元素节点新增一个class属性值 2)在style标签或css文件中,通过新增的class属性来选中该元素,然后再选择器中书写需要添加的样式
<script>
window.onload = function () {
var box = document.getElementById("box");
// 获取单个样式
var btn1 = document.getElementById("btn1");
btn1.onclick = function () {
console.log(box.style.backgroundColor);
console.log(box.style.opacity);
// 只能获取行内样式,不能获取选择器中的样式
// console.log(box.style.width);
// 设置单个行内样式
var btn2 = document.getElementById("btn2");
btn2.onclick = function () {
box.style.backgroundColor = "red";
box.style.opacity = 1;
box.style.width = "400px";
// 设置多个样式
var btn3 = document.getElementById("btn3");
btn3.onclick = function () {
box.style.cssText = "background-color: red; opacity: 1; width : 400px;";
var btn4 = document.getElementById("btn4");
btn4.onclick = function () {
box.className = box.className + " box";
</script>
</head>
<div id="box" class="block" style="background-color: blue; opacity: 0.3;"></div>
<button id="btn1">获取行内样式</button>
<button id="btn2">设置单个行内样式</button>
<button id="btn3">设置多个行内样式</button>
<button id="btn4">通过CSS设置样式</button>
</body>
2.clientWidth和clientHeight clientWidth: 返回width属性+左右padding的值
clientHeight:返回height属性+上下padding的值
好处: 1)能获取选择器中设置的宽高样式值
2)返回的结果是数值,不携带单位,方便直接做运算。
<script>
window.onload = function () {
var btn = document.getElementById("btn");
var box = document.getElementById("box");
btn.onclick = function () {
console.log("clientWidth: " + box.clientWidth);
console.log("clientHeight: " + box.clientHeight);
</script>
</head>
<div id="box"></div>
<button id="btn">获取元素宽高</button>
</body>
3.位置,和我们CSS所学的绝对定位想相关。 offsetParent: 通过绝对定位的元素,从而获取绝对定位的参照元素。
offsetTop:通过绝对定位的元素,从而获取距离参照元素顶部的距离
offsetLeft:通过绝对定位的元素,从而获取距离参照元素左侧的距离
<script>
window.onload = function () {
var btn = document.getElementById("btn");
var child = document.getElementById("child");
btn.onclick = function () {
// 通过绝对定位的元素,从而获取绝对定位的参照元素。
// console.log(child.offsetParent);
// 通过绝对定位的元素,从而获取距离参照元素顶部的距离
console.log("offsetTop:" + child.offsetTop);
// 通过绝对定位的元素,从而获取距离参照元素左侧的距离
console.log("offsetLeft:" + child.offsetLeft);
</script>
4DOM访问关系
DOM访问关系 找父节点(找亲父亲),一个儿子只有一个父亲,所以返回的就是父元素节点。 语法:子节点.parentNode 返回值:返回的是父元素节点对象。 找子节点(找亲儿子),一个父亲可以有多个儿子,所以返回的就是集合,集合中的每一个元素才是子元素节点对象 语法:父节点.children 返回值:返回的是子元素节点集合
<script>
window.onload = function () {
var btn1 = document.getElementById("btn1");
var child = document.getElementById("child");
btn1.onclick = function () {
child.parentNode.style.backgroundColor = "red";
var btn2 = document.getElementById("btn2");
var list = document.getElementById("list");
btn2.onclick = function () {
var arr = list.children;
for(var i = 0; i < arr.length; i++) {
arr[i].style.backgroundColor = "red";
</script>
5DOM节点操作
<script>
window.onload = function () {
// 创建一个元素
var box = document.createElement("p");
box.innerHTML = "我是动态创建出来的段落标签";
box.title = "段落标签";
box.style.backgroundColor = "yellow";
// 在父元素内部的末尾追加一个元素
var btn1 = document.getElementById("btn1");
var parent = document.getElementById("parent");
btn1.onclick = function () {
parent.appendChild(box);
// 在父元素内部的指定位置插入一个元素
var btn2 = document.getElementById("btn2");
btn2.onclick = function () {
var txt = document.getElementById("txt");
parent.insertBefore(box, null);
// 删除元素
var btn3 = document.getElementById("btn3");
btn3.onclick = function () {
var txt = document.getElementById("txt");
parent.removeChild(txt);
// 删除所有子节点
var btn4 = document.getElementById("btn4");
btn4.onclick = function () {
// 删除父元素中所有的子元素
parent.innerHTML = "";
</script>
</head>
<div id="parent">
<p>我是一个p标签</p>
<strong id="txt">我是一个strong标签</strong>
<span id="box">我是一个span标签</span>
<button id="btn1">追加节点</button>
<button id="btn2">插入节点</button>
<button id="btn3">删除节点</button>
<button id="btn4">删除所有子节点</button>
</body>
元素节点拷贝(克隆) 剪切插入元素 获取到元素,直接把元素插入文档的操作,那么就是剪切操作 复制插入元素 a)先对元素进行赋值 b)执行元素插入操作 元素节点克隆 语法:需要复制的元素节点.cloneNode(boolean类型的参数) 参数:如果为true,代表连同子元素一起克隆。如果为false(默认为值),则不克隆子元素!
<script>
window.onload = function () {
var src = document.getElementsByClassName("src")[0];
var des = document.getElementById("des");
var btn1 = document.getElementById("btn1");
* 执行剪切、插入操作
btn1.onclick = function () {
des.appendChild(src);
var btn2 = document.getElementById("btn2");
* 执行复制、插入操作
btn2.onclick = function () {
// 执行src复制操作
var cloneNode = src.cloneNode(true);
// 把克隆的元素追加到des内部末尾
des.appendChild(cloneNode);
</script>
</head>
<div class="src">
<p>我是一个段落标签</p>
<h1>我是一个标题标签</h1>
<div id="des">
<button id="btn1">移动元素节点</button>
<button id="btn2">复制元素节点</button>
</body>
下面是一个添加删除的小例子
<script>
window.onload = function () {
var btn = document.getElementById("btn");
var box = document.getElementById("box");
// 给“添加内容”按钮添加一个单击事件
var index = 0;
btn.onclick = function () {
// 1.创建元素节点
var div = document.createElement("div");
var input = document.createElement("input");
var delBtn = document.createElement("button");
// 2.给创建的元素添加内容、样式和属性
div.style.margin = "5px 0";
input.type = "file";
delBtn.innerHTML = "删除" + ++index;
// 3.把创建的元素节点添加进入文档
box.appendChild(div);
div.appendChild(input);
div.appendChild(delBtn);
// 4.点击“删除”按钮,执行删除操作
delBtn.onclick = function () {
// this-->事件源 -->就是响应单击事件的"删除按钮"
// box.removeChild(this.parentNode);
// this.parentNode.parentNode.removeChild(this.parentNode);
// remove()方法也能删除元素,属于非W3C的规范方法,但是浏览器几乎都支持
this.parentNode.remove();
</script>
</head>
<button id="btn">添加内容</button>
<div id="box">
</div>
4.DOM表单操作
1.value属性
表单操作,此处中讲得就是表单属性属性操作。 重要的表单属性:value、checked、selected、disabled 强调:以上四个属性都属于读写属性。 value属性:用于设置或获取“表单域”的内容和“表单按钮”的显示文字。
<script>
window.onload = function () {
var btn1 = document.getElementById("btn1");
var userName = document.getElementById("userName");
// 获取内容
btn1.onclick = function () {
userName.value = "admin";
// 设置内容
var btn2 = document.getElementById("btn2");
btn2.onclick = function () {
console.log(userName.value);
</script>
</head>
姓名:<input type="text" id="userName"> <br>
<button id="btn1">获取文本输入框内容</button>
<button id="btn2">设置文本输入框内容</button>
</body>
2.checked: 设置或获取“单选框”和“复选框”的选中状态! 判断是否被选中 checked:返回值为true,则证明被选中,否则证明没有被选中 设置某一个被选中 checked:设置的属性值为true,代表设置选中,否则代表设置不选中
获取用户选中的那个单选框,然后获取选中单选框的value值 1)遍历所有的单选框(name属性值相同的) 2)判断每一个单选框的选中状态 checked:返回值为true,则证明被选中,否则证明没有被选中 3)如果某一个单选框被选中,那么输出该单选框的value属性值
<script>
window.onload = function () {
var btn1 = document.getElementById("btn1");
btn1.onclick = function () {
// 获取所有的单选框元素集合
var sexArr = document.getElementsByClassName("sex");
// 通过循环,遍历所有的单选框
for(var i = 0; i < sexArr.length; i++) {
// 判断每一个单选框的选中状态
if(sexArr[i].checked) {
// 输出被选中单选框的value属性值
console.log(sexArr[i].value);
// 因为单选框只能被选中一个,所以找到符合条件的单选框之后,可以跳出循环
// 但是复选框可以选中多个,所以找到其中一个符合条件的复选框之后,还需要继续循环
break;
* 手动设置“未知”为默认选中,设置value属性值为“3”的单选框选中
* 1)遍历所有的单选框(name属性值相同的)
* 2)判断单选框的value属性值是否为“3”
* 3)如果某个单选框的value属性值为“3”,则把该单选框设置为选中
* checked: 设置的属性值为true,代表设置选中,否则代表设置不选中
var btn2 = document.getElementById("btn2");
btn2.onclick = function () {
// 获取所有的单选框元素集合
var sexArr = document.getElementsByClassName("sex");
// 通过循环,遍历所有的单选框
for(var i = 0; i < sexArr.length; i++) {
// 判断单选框的value属性值是否为“3”
if(sexArr[i].value === "3") {
// 把该单选框设置为选中
sexArr[i].checked = true;
// 因为单选框只能被选中一个,所以找到符合条件的单选框之后,可以跳出循环
// 但是复选框可以选中多个,所以找到其中一个符合条件的复选框之后,还需要继续循环
break;
</script>
</head>
<input type="radio" class="sex" name="sex" value="1">女
<input type="radio" class="sex" name="sex" value="2">男
<input type="radio" class="sex" name="sex" value="3">未知
<br><br>
<button id="btn1">获取选中的性别</button>
<button id="btn2">设置选中的性别</button>
</body>
3selected属性,用于设置或获取“下拉列表”选中。 注意:selected属性是作用于option标签上面的。 判断是否被选中 selected:返回值为true,代表被选中,否则代表没有被选中 设置option被选中 selected: 设置值为true,则代表被选中,否则代表不被选中。
<script>
window.onload = function () {
var city = document.getElementById("city");
* 获取用户选中的option,然后输出option的value属性值
* 1)遍历下拉列表中的所有option元素
* 2)判断option元素是否被选中
* selected:返回值为true,代表被选中,否则代表没有被选中
* 3)把选中的option的value属性值输出
var btn1 = document.getElementById("btn1");
btn1.onclick = function () {
// 获取下拉列表中所有的option
var options = city.children;
// 通过循环,遍历下拉列表中的所有option元素
for(var i = 0; i < options.length; i++) {
// 判断每一个option是否被选中
if(options[i].selected) {
// 输出被选中option的value属性
console.log(options[i].value);
* 设置“武汉”为默认讯中,也就是设置value属性值为“027”的option被选中
* 1)遍历下拉列表中的所有option元素
* 2)判断每一个option元素的value属性值是否为“027”
* 3)把符合条件的option设置为默认选中
* selected: 设置值为true,则代表被选中,否则代表不被选中。
var btn2 = document.getElementById("btn2");
btn2.onclick = function () {
// 获取下拉列表中所有的option
var options = city.children;
// 通过循环,遍历下拉列表中的所有option元素
for(var i = 0; i < options.length; i++) {
// 判断每一个option的value属性值是否为“027”
if(options[i].value === "027") {
// 设置value属性值为“027”的option为选中
options[i].selected = true;
* 设置“重庆”、“北京”、“武汉”、“上海”为默认选中
var btn3 = document.getElementById("btn3");
btn3.onclick = function () {
// 获取下拉列表中所有的option
var options = city.children;
// 通过循环,遍历下拉列表中的所有option元素
for(var i = 0; i < options.length; i++) {
// 判断每一个option的value属性值是否为“023”、“021”、“027”、“020”
if(options[i].value === "023" || options[i].value === "021" || options[i].value === "027" || options[i].value === "020") {
// 设置value属性值为“027”的option为选中
options[i].selected = true;
</script>
</head>
故乡:<select id="city" size="4" multiple>
<option value="023">重庆</option>
<option value="021" selected>北京</option>
<option value="027">武汉</option>
<option value="020">上海</option>
<option value="022">长沙</option>
<option value="025">广州</option>
</select>
<button id="btn1">获取选中的城市</button>
<button id="btn2">设置选中的城市</button>
<button id="btn3">设置选中多个城市</button>
</body
4 disabled属性:设置或获取表单元素的选中状态 补充:disabled属性不但可以作用于表单元素上面,还能作用于button标签上面
<script>
window.onload = function () {
var txt = document.getElementById("txt");
var submit = document.getElementById("submit");
// 判断表单元素是否被禁用
console.log(txt.disabled);
console.log(submit.disabled);
// 设置表单元素为禁用
var sex = document.getElementById("sex");
sex.disabled = true;
// 取消表单按钮的禁用状态
submit.disabled = false;
var btn = document.getElementById("btn");
console.log(btn.disabled);
btn.disabled = false;
</script>
</head>
<input type="text" id="txt">
<input type="submit" id="submit" disabled>
<input type="radio" name="sex"> 男
<input type="radio" name="sex"> 女
<input type="radio" id="sex" name="sex"> 未知
<button id="btn" disabled>我是一个普通按钮</buttonid>
</body>
5表单事件操作
需求1:点击button[id="submit"]按钮,实现form表单的提交工作 实现1:form表单元素节点.submit() 作用于表单上面,当表单提交时触发。
需求2:点击button[id="reset"]按钮,实现form表单的重置工作 实现2:form表单元素节点.reset() 作用于表单上面,当表单重置时触发。
<script>
window.onload = function () {
var submitBtn = document.getElementById("submit");
submitBtn.onclick = function () {
// 实现form表单元素的提交服务器工作
document.login.submit();
var resetBtn = document.getElementById("reset");
resetBtn.onclick = function () {
document.login.reset();
</script>
</head>
<form action="http://www.baidu.com" name="login">
<input type="text" name="username" placeholder="请输入用户名..."> <br>
<input type="password" name="password" placeholder="请输入密码..."> <br>
</form>
<button id="submit">提交数据</button>
<button id="reset">重置数据</button>
</body>
下面是一个百度和360同事搜索的例子
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
form {
/*text-align: center;*/
width: 290px;
margin: 0 auto 15px;
input[type="text"] {
width: 200px;
input[type="submit"] {
width: 80px;
iframe {
border: 1px solid blue;
width: 49.5%;
height: 480px;
</style>
</head>
提交form表单数据时,直接跳转到某一个ifrme标签上面加载网页的实现方式。
1)给form标签添加target属性,给iframe添加name属性
2)要求target属性值和name属性值相同
注意点:form表单中 target属性和name属性的属性值不要相同
<form action="http://www.baidu.com/s" target="baidu_form" name="baidu_name">
<input type="text" name="wd"> <!--name的属性值由百度服务器提供-->
<input type="submit" value="搜索" name="submit">
</form>
<form action="http://www.so.com/s" style="display: none" target="so360_from" name="so360_name">
<input type="text" name="q"> <!--name的属性值由360服务器提供-->
<input type="submit" value="搜索">
</form>
<iframe name="baidu_form" frameborder="0"></iframe> <!--展示百度搜索结果-->
<iframe name="so360_from" frameborder="0"></iframe> <!--展示360搜索结果-->
<script>
* 需求:点击“百度”的搜索按钮,把“百度”输入框中的数据赋值给“360”输入框中
* 然后把“360”的form表单提交数据给服务器
// 1.获取“百度”提交按钮,并且给该按钮添加单击事件
var submit = document.baidu_name.submit;
submit.onclick = function () {
// 2.获取“百度”输入框中的数据,然后赋值给“360”输入框
var value = document.baidu_name.wd.value;
document.so360_name.q.value = value;
// 3.手动触发“360”的form表单提交数据
document.so360_name.submit();
</script>
</body>
5.DOM事件
1双击事件 连续、快速点击鼠标左键两下,就响应双击事件。 如果同一个元素,同时添加了单击事件和双击事件,怎么区分??? 建议:不要对一个元素同时添加单击事件和双击事件! 解决:判断两次单击事件的间隔时间,如果间隔时间很短,就不相应单击事件即可! 网页实现方案一大堆。
<script>
window.onload = function () {
var btn = document.getElementById("btn");
btn.ondblclick = function () {
console.log("双击事件");
btn.onclick = function () {
console.log("单击事件");
</script>
</head>
<div id="btn"></div>
2焦点事件
焦点事件,一般用于输入框相关的标签。 获得焦点 onfocus 失去焦点 onblur 使用场合:设置输入框的边框样式!
<script>
window.onload = function () {
var input = document.getElementById("uName");
// 获得焦点
input.onfocus = function () {
console.log("获得焦点");
this.style.border = "1px solid #5099CC";
// 失去焦点
input.onblur = function () {
console.log("失去焦点");
this.style.border = "1px solid #ccc";
</script>
</head>
<input type="text" id="uName">
</body>
3改变事件
改变事件,change事件 主要用于下拉列表和文本输入框 下拉列表:当下拉列表选中的option发生了变化,那么即刻响应改变事件 注意1:change事件作用于select标签上面,而不是作用于option上面 注意2:如果下拉列表一次只能选中一个option,那么获取被选中option的 value属性值可以直接通过 select元素节点.value 获取 select元素节点.value 一般在change事件的时候使用! 文本输入框:失去焦点 + 文本框内容发生变化,满足以上两个条件才会触发change事件
需求:用户数输入的字母在失去焦点时全部变为大写 失去焦点事件:可以实现,但是效率低。 用户输入的数据未发生变化,但失去焦点时还需要把输入框中的数据变为大写 改变事件:可以实现,效率高 当失去焦点时,还需要内容发生变化,才会执行改变事件
<script>
window.onload = function () {
var city = document.getElementById("city");
city.onchange = function () {
console.log(this.value);
var password = document.getElementById("password");
password.onchange = function () {
this.value = this.value.toUpperCase();
</script>
</head>
故乡:<select name="city" id="city">
<option value="1">北京</option>
<option value="2">上海</option>
<option value="3">广州</option>
<option value="4">武汉</option>
</select>
密码:<input id="password" type="text" placeholder="请输入密码">
</body>
4鼠标事件
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#box {
width: 200px;
height: 200px;
background-color: yellow;
</style>
<script>
window.onload = function () {
</script>
</head>
<div id="box"></div>
</body>
鼠标事件(冒泡)
鼠标进入(onmouseover) + 鼠标离开(onmouseout) 会触发事件冒泡 鼠标进入(onmouseenter) + 鼠标离开(onmouseleave) 不会触发事件冒泡 现实开发中,使用“鼠标进入(onmouseenter) + 鼠标离开(onmouseleave)”最多 补充:目前我们所学事件中,只有onmouseenter+onmouseleave不会触发事件冒泡 其余的事件都会触发事件冒泡。
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
window.onload = function () {
var parent = document.getElementById("parent");
var child = document.getElementById("child");
// 给parent添加鼠标进入和离开事件
parent.onmouseover = function () {
console.log("鼠标进入");
parent.onmouseout = function () {
console.log("鼠标离开");
</script>
</head>
<div id="parent">
<div id="child"></div>
</body>
5键盘事件 键盘事件,一般作用于整个文档。 键盘按下(onkeydown) 键盘抬起(onkeyup)
<script>
document.onkeydown = function () {
console.log("键盘按下");
document.onkeyup = function () {
console.log("键盘抬起");
</script>
下面是一个天猫切换图片事件(闭包)
<script>
window.onload = function () {
// 1.获取所有的li标签
var list = document.getElementById("list").children;
var box = document.getElementById("box");
// 2.遍历list集合,获取每一个li标签
for(var i = 0; i < list.length; i++) {
// 3.给li标签添加onmouseenter事件
// 方案一:闭包解决
list[i].onmouseenter = function (index) {
return function () {
// 4.更新li标签对应的大图片,更改body的背景图片
var url = "url(mouse-img/0" + (index + 1) + "big.jpg)";
box.style.backgroundImage = url;
}(i);
console.log(i);
</script>
</head>
<div id="box">
<!--box的上半部分设置的为背景图片,大图-->
<!--box的下半部分设置的是小图,通过ul+li来展示的-->
<ul id="list">
<li><img src="mouse-img/01.jpg" alt="鼠标"></li>
<li><img src="mouse-img/02.jpg" alt="鼠标"></li>
<li><img src="mouse-img/03.jpg" alt="鼠标"></li>
<li><img src="mouse-img/04.jpg" alt="鼠标"></li>
<li><img src="mouse-img/05.jpg" alt="鼠标"></li>
</div>
用添加属性的方法也可以实现
window.onload = function () {
// 1.获取所有的li标签
var list = document.getElementById("list").children;
var box = document.getElementById("box");
// 2.遍历list集合,获取每一个li标签
for(var i = 0; i < list.length; i++) {
// 3.给li标签添加onmouseenter事件
// 方案二:利用js对象可以动态的添加属性的特性,以此来解决问题。
list[i].index = i;
list[i].onmouseenter = function (index) {
// 4.更新li标签对应的大图片,更改body的背景图片
var url = "url(mouse-img/0" + (this.index + 1) + "big.jpg)";
box.style.backgroundImage = url;
}
6even属性
event对象,该对象是事件匿名函数的一个形参,每个事件的匿名函数都携带这个形参。 event对象,是响应事件时默认传递过来的,对于开发者而言,只需要掌握使用即可! 建议:event对象形参名可以自定义,但是最好取名就叫做event,这样见名知意。
event对象的属性(了解)
event对象的方法(掌握)
// 键盘事件
document.onkeydown = function (event) {
// 判断用户是否是按下的:alt、shift和ctrl键
/*console.log("ctrlKey:" + event.ctrlKey);
console.log("shiftKey:" + event.shiftKey);
console.log("altKey:" + event.altKey);*/
// 判断用户按下的是键盘哪一个按键
console.log("keyCode:" + event.keyCode);
console.log("key:" + event.key);
// 鼠标事件
document.onmousedown = function (event) {
/*if(event.button === 0) {
console.log("左键按下");
else if(event.button === 1) {
console.log("中键按下");
else if(event.button === 2) {
console.log("右键按下");
// 获取相对于浏览器窗口左上角的坐标
console.log("clientX:" + event.clientX);
console.log("clientY:" + event.clientY);
/*var btn = document.getElementById("btn");
btn.onclick = function (event) {
console.log(event);
};*/
事件冒泡:给子元素添加事件,如果父类元素也添加了对应的事件,那么当 子元素响应该事件的时候,也会冒泡给该子元素的父类元素响应该事件
var child = document.getElementById("child");
var parent = document.getElementById("parent");
child.onclick = function (event) {
console.log("click -- child");
console.log(event.target);
console.log(event.currentTarget);
parent.onclick = function () {
console.log("click -- parent");
* target:最初触发事件的DOM元素,特指事件触发源 。
* currentTarget:在事件冒泡阶段中的当前DOM元素,特指当前事件源
console.log(event.target);
console.log(event.currentTarget);
document.body.onclick = function () {
console.log("click -- body");
console.log(event.target);
console.log(event.currentTarget);
}
如何阻止事件冒泡呢
event对象--方法 1)阻止事件冒泡 W3C提供的事件中,只有onmouseenter和onmuseleave默认实现了阻止事件冒泡 event.stopPropagation(); 2)取消事件默认行为
var child = document.getElementById("child");
var parent = document.getElementById("parent");
child.onclick = function (event) {
console.log("click -- child");
// 阻止事件冒泡
event.stopPropagation();
parent.onclick = function () {
console.log("click -- parent");
document.body.onclick = function () {
console.log("click -- body");
}
2)取消事件默认行为 方式一:使用event对象提供的方法来实现 event.preventDefault(); 方式二:在事件函数内部,返回return false;来实现 return false;
var submit = document.form.btn;
submit.onclick = function (event) {
alert("哈哈");
// 方式一:使用event对象提供的方法来实现
// event.preventDefault();
// 方式二:在事件函数内部,返回return false;来实现
return false;
var link = document.getElementById("link");
link.onclick = function (event) {
alert("xixi");
// 方式一:使用event对象提供的方法来实现
// event.preventDefault();
// 方式二:在事件函数内部,返回return false;来实现
return false;
}
取消事件默认行为 方式一:使用event对象提供的方法来实现 a)在 onclick="mySubmit(event);" 传递event对象 b)在mySubmit方法的方法体中,执行 event.preventDefault(); 方式二:在事件函数内部,返回return false;来实现 a)在 onclick="return myLink();" b)在 myLink的方法体中,返回return false;
<body>
<form action="http://www.baidu.com" name="form">
<input type="text" name="username">
<!--<input type="submit" name="btn" onclick="mySubmit(event, this);">-->
<input type="submit" name="btn" onclick="mySubmit();">
</form>
<!--<a href="http://www.baidu.com" id="link" onclick="myLink(event);">百度一下,你就知道</a>-->
<!--<a href="http://www.baidu.com" id="link" onclick="return false;">百度一下,你就知道</a>-->
<a href="http://www.baidu.com" id="link" onclick="return myLink();">百度一下,你就知道</a>
<a href="javascript:;">尚学堂武汉校区</a>
<script>
function mySubmit() {
alert("哈哈1");
return false;
function myLink() {
alert("嘻嘻1");
return false;
/*function mySubmit(event, _this) {
alert("哈哈1");
console.log(event);
console.log(_this);
event.preventDefault();
function myLink(event) {
alert("嘻嘻1");
event.preventDefault();
</script>
下面是一个小蜜蜂练习
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
img {
position: fixed;
</style>
<script>
window.onload = function () {
var mifeng = document.getElementById("mifeng");
document.onmousemove = function (event) {
mifeng.style.top = event.clientY - mifeng.clientHeight/2 + "px";
mifeng.style.left = event.clientX - mifeng.clientWidth/2 + "px";
</script>
</head>
<img src="mifeng/miaomifeng.gif" alt="小蜜蜂" id="mifeng">
</body>
5.BOM对象
<body>
<a href="javascript:;" id="link">打开百度首页</a>
<button id="btn">刷新网页</button>
<iframe width="800px" height="300px" src="http://www.baidu.com" frameborder="0"></iframe><br>
<input type="button" value="返回" onclick="goBack()">
<input type="button" value="前进" onclick="forward()">
<script>
function goBack(){
window.history.back()
function forward() {
window.history.forward();
var link = document.getElementById("link");
var btn = document.getElementById("btn");
btn.onclick = function () {
location.reload();
* BOM的学习核心是:window对象
* 需要掌握的方法:
* window.location.href = "http://www.baidu.com";
* window.open("http://www.jd.com");
link.onclick = function () {
// 通过js打开某一个网页(在当前窗口打开)
// window.location.href = "http://www.baidu.com";