DOM概述

  html加载完毕,渲染引擎会在内存中把html文档生成一个DOM树,getElementById是获取内DOM上的元素,然后操作的时候修改的是该元素的属性


体验事件/事件三要素
1.事件源(引发后续事件的标签
2.事件(js已经定义好,直接使用
3.事件驱动程序(对样式和html的操作)(DOM操作 需求:点击盒子,弹出对话框alert(1)
步骤:-->
1.获取事件源(document.getElementById("box")
2.绑定事件 (事件源.事件 = function(){ 事件驱动程序 }
3.书写事件驱动程序。
 <body>
<div id="box" style="width:100px; height:100px ;background-color:blue ;cursor: pointer;"></div> <script>
// 1.获取事件源(document.getElementById("box")
var div = document.getElementById("box");
// 2.绑定事件 (事件源.事件 = function(){ 事件驱动程序 })
div.onclick = function () {
// 3.书写事件驱动程序。
alert(1);
}; </script>

初试 DOM

  1. 执行事件步骤

    A)  获取事件源(有五种)/也可通过节点

      1.  document.getElementsById()     //  通过ID
      2.  document.getElementsByTagName()  // 通过标签名

        a)  获取的一个数组

          3.  document.getElementsByClassName() [0]    // 通过类名  ,没有获取到则返回空数组

          4.  document.getElementsByName()[0]        //  不能直接操作数组

          5.  document.getElementsByTagNameaNS()[0]

    B)  绑定事件

    1.   事件源.事件 = function(){事件处理函数}
    2.   函数不要有返回值,调用的时候不要加括号
1. 事件源.事件 = fn;

2. function fn(){

3. 事件;

4. }

     3.   行内绑定

        a)  外部定义好,行内直接调用

     C)  书写事件驱动程序

    1.   操作标签的样式和样式
    2.   事件源.style.样式属性  = ‘属性值’
    3.   属性值要用引号括起来

windows.onload:       

a)  页面加载完毕(文本和图片都加载完毕)的时候触发的事件

b)  js和html同步加载

c)  使用元素在定义之前,容易出bug

d)  作用是防止使用元素在定义元素之前出的bug

  1. 通过类名控制标签属性

a)  替换类名和添加类名

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title> <style>
* {
margin: 0;
padding: 0;
}
.top-banner {
background-color: #7dff51;
height:80px;
}
.w {
width: 1210px;
margin:10px auto;
position: relative;
}
img {
width: 1210px;
height: 80px;
background-color: #37c2fb;
}
a {
position: absolute;
top: 5px;
right: 5px;
color: #FFFFFF;
background-color: #000;
text-decoration: none;
width: 20px;
height: 20px;
font:700 14px/20px "simsum";
text-align: center;
}
.hide {
display:none !important;
} </style> </head>
<body> <div class="top-banner" id="topBanner">
<div class="w">
<img src="" alt=""/>
<a href="#" id="closeBanner">x</a>
</div>
</div> <script>
// 需求:点击案例,隐藏盒子
// 步骤:
// 1:获取事件源
// 2:绑定事件
// 3:书写事件驱动程序
// 1.获取事件源
var closeBanner = document.getElementById("closeBanner");
var topBanner = document.getElementById("topBanner");
// 2.绑定事件
closeBanner.onclick= function(){
// 3.书写事件驱动
topBanner.className = "hide"; // 替换旧类名
// topBanner.className +="hide" ; // 保留原类名
// topBanner.style.display = "none" ; } </script> </body>
</html>

体验:点击右上角的X ,关闭横福广告

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
// 让页面加载完毕后再执行本代码
window.onload = function() {
// 需求:鼠标放到img上,修改图片路径src
// 1.获取事件源
var img = document.getElementById("box");
// 2.绑定事件
img.onmouseout = function(){
// 3.设定驱动程序来修改图片地址
this.src = "image/image1.png" ;
}; var img = document.getElementById("box");
img.onmouseover = function(){
this.src = "image/image2.png" ;
}
} </script>
</head>
<body> <img src="data:image/jd1.png" id="box" style="cursor: pointer;border: 1px solid #ccc;"> </body>
</html>

实现鼠标指上去变换图片的特效

什么是DOM和节点

  1. DOM由节点组成
  2. 树状模型
  3. 节点:object类型,是内置对象

    a)  每个HTML标签都是一个元素节点

    b)  标签中的文字是文字节点

    c)  标签的属性是属性节点

  4.DOM操作就是操作节点

  5.是一套操作html和xml文档的API

访问关系获取

  1. 节点访问关系是以属性的方式存在的
  2. .parentNode:获取父节点
  3. sibling、Next、previous
  4. .nextElemntSibling
  5. .previousElementSibing:
  6. .firstElementFirstSibling
  7. children();返回指定的子元素结合
  8. 节点自己.parentNode.Children[index]:得到随意得到兄弟的节点
  9. parenNode
  10. children

节点的操作

  1. 节点的创建、添加、删除
  2. 节点的访问关系都是属性,节点的操作都是函数或者方法

    

 <body>
<div class="box1">
<div class="box2" id="box2"></div>
<div class="box3"></div>
</div>
<script>
//节点的访问关系是以属性形式存在 //1.box1是box的父节点
// var box2 = document.getElementsByClassName("box2")[0];
var box2 = document.getElementById("box2");
console.log(box2.parentNode);

父节点

  //  2. nextElementSibling  下一个兄弟节点
console.log ( box2.nextElementSibling );
// firseElementChild 第一个子节点
console.log (box2.parentNode.firstElementChild ) ;
// 所有子节点
console.log( box2.parentNode.childNodes ) ;
console.log(box2.parentNode.children ) ;

下一个节点

 创建节点

    var 新标签 =document.createElement("标签")

 插入节点

    1. 父节点.removeChild(子节点)

    2. 父节点.appendChild (  ) {  }

    3. 父节点.insertBefore ( 新节点,已知节点)

 . 删除节点

    父节点.removeChild(’删除的元素(先获取)’)

    父元素.parentNode.removeChild(’要删除的元素’)

复制节点

    1. 新节点 = 要赋值的节点.cloneNode(true/false);

        a)  true:全部复制

        b)  false:只复制当前节点,里面的内容不复制

     2. 创建之后要添加到已有的节点上

     3. box.appendchild();

节点属性操作

  1. 获取属性

    a)  元素节点.属性或者元素节点[属性]

    b)  元素节点.方法();

  1. 节点名.setAttribute(“id”,“aa”): 添加一id=“aa”的属性
  2. 节点名. removeAttribute(”id”);删除ID属性
  3. 修改class属性要写成className::因为class是关键字
  4. 节点名
  5. .innerHTML修改标签中间的文字

    

 <script>
window.onload = function () { var eleNode = document.getElementsByTagName("img")[0]; //属性、赋值获取两种方式
//1.元素节点.属性或者元素节点[属性]
eleNode.src = "image/jd2.png";
eleNode.aaa = "bbb";
console.log(eleNode.aaa);
console.log(eleNode.src);
console.log(eleNode.tagName);
console.log(eleNode["title"]);
console.log(eleNode["className"]);
console.log(eleNode["alt"]); //2.元素节点.方法();
console.log(eleNode.getAttribute("id"));
eleNode.setAttribute("id","你好");
eleNode.setAttribute("ccc","ddd"); eleNode.removeAttribute("id");
}
</script>
</head>
<body>
<img src="data:image/jd1.png" class="box" title="图片" alt="京东狗" id="aaa"/>
</body>
</html>

节点的属性

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body> <!--<a href="javacript:;">切换</a>-->
<!--<a href="#">切换</a>-->
<a href="http://www.baidu.com" style="margin:10px;display: block" onclick="fn();return false;">切换</a>
<img id="img" src="data:image/1.jpg" width="400px"/> <script>
//需求:点击a链接,img图片切换(行内式)
//步骤:
//1.获取事件源和图片
//2.绑定事件
//3.书写事件驱动程序 //1.获取事件源和图片
// var a = document.getElementsByTagName("a")[0];
// var img = document.getElementById("img");
// //2.绑定事件
// a.onclick = function () {
// //3.书写事件驱动程序
// img.src = "image/2.jpg";
// //return false的目的是禁止a连接跳转;
// return false;
// }
var img = document.getElementById("img");
function fn(){
img.src = "image/2.jpg";
} </script> </body>
</html>

图片切换

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
button {
margin: 10px;
}
div {
width: 200px;
height: 200px;
background-color: pink;
}
.show {
display: block;
}
.hide {
display: none;
}
</style> </head>
<body>
<button id="btn">隐藏</button>
<div> </div> <script>
//需求:点击button,隐藏盒子。改变文字,在点击按钮,显示出来。
//步骤:
//1.获取事件源和相关元素
//2.绑定事件
//3.书写事件驱动程序 //1.获取事件源和相关元素
var btn = document.getElementById("btn");
var div = document.getElementsByTagName("div")[0];
//2.绑定事件
btn.onclick = function () {
//3.书写事件驱动程序
//判断btn的innerHTML属性值,如果为隐藏就隐藏盒子,并修改按钮内容为显示。
//反之,则显示,并修改按钮内容为隐藏
if(this.innerHTML === "隐藏"){
div.className = "hide";
//修改文字(innerHTML)
btn.innerHTML = "显示";
}else{
div.className = "show";
//修改文字(innerHTML)
btn.innerHTML = "隐藏";
}
} </script> </body>
</html>

显示和隐藏盒子

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body {
font-family: "Helvetica", "Arial", serif;
color: #333;
background: #ccc;
margin: 1em 10%;
} /** {*/
/*margin:0;*/
/*padding: 0;*/
/*}*/
h1 {
color: #333;
background-color: transparent;
} a { display:inline-block;
color: #c60;
background-color: transparent;
font-weight: bold;
text-decoration: none;
}
.box1 img {
margin:10px 15px 20px 0 ;
} /*.box1 {*/
/*width: 520px;*/
/*background-color: #7dff51;*/
/*}*/
</style>
</head>
<body> <h1>这是一个画廊</h1>
<a href="#">点我可以注册</a>
<div>
<div id="box1">
<a href="image/1.jpg" title="美女A">
<img src="data:image/1-small.jpg" width="100">
</a>
<a href="image/2.jpg" title="美女B">
<img src="data:image/2-small.jpg" width="100">
</a>
<a href="image/3.jpg" title="美女C">
<img src="data:image/3-small.jpg" width="100">
</a>
<a href="image/4.jpg" title="美女D">
<img src="data:image/4-small.jpg" width="100">
</a> </div>
<div id="box2">
<a href="#">
<img id="image" src="data:image/placeholder.png" width="450px">
</a>
<p id="des">请点击一张图片</p>
</div>
</div>

点击小图出现大图

 <!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style type="text/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;
} li {
float: left;
padding: 1em;
list-style: none;
} #imagegallery { list-style: none;
} #imagegallery li {
margin: 0px 20px 20px 0px;
padding: 0px;
display: inline;
} #imagegallery li a img {
border: 0;
}
</style> </head>
<body>
<h2>
美女画廊
</h2>
<a href="#">注册</a>
<ul id="imagegallery">
<li>
<a href="image/1.jpg" title="美女A">
<img src="data:image/1-small.jpg" width="100" alt="美女1"/>
</a>
</li>
<li>
<a href="image/2.jpg" title="美女B">
<img src="data:image/2-small.jpg" width="100" alt="美女2"/>
</a>
</li>
<li>
<a href="image/3.jpg" title="美女C">
<img src="data:image/3-small.jpg" width="100" alt="美女3"/>
</a>
</li>
<li>
<a href="image/4.jpg" title="美女D">
<img src="data:image/4-small.jpg" width="100" alt="美女4"/>
</a>
</li>
</ul> <div style="clear:both"></div> <img id="image" src="data:image/placeholder.png" width="450px"/> <p id="des">选择一个图片</p> <script>
//需求:点击小图片,改变下面的大图片的src属性值。赋值为a链接的href属性值。
//让p标签的innnerHTML属性值,变成a标签的title属性值。
//步骤:
//1.获取事件源和相关元素
//2.绑定事件
//3.书写事件驱动程序 //1.获取事件源和相关元素
//利用元素获取其下面的标签。
var ul = document.getElementById("imagegallery");
var aArr = ul.getElementsByTagName("a");
// console.log(aArr[0]);
var img = document.getElementById("image");
var des = document.getElementById("des");
//2.绑定事件
//以前是一个一个绑定,但是现在是一个数组。for循环绑定
for(var i=0;i<aArr.length;i++){
aArr[i].onclick = function () {
//3.书写事件驱动程序
//修改属性
//this指的是函数调用者,和i并无关系,所以不会出错。
img.src = this.href;
// img.src = aArr[i].href;
des.innerHTML = this.title;
return false;
}
} </script> </body>
</html>

value和innerHtml和innerText


//    value:标签的value属性。
//innerHTML:获取双闭合标签里面的内容。(识别标签)
//innerText:获取双闭合标签里面的内容。(不识别标签)(老版本的火狐用textContent)

JS-DOM . 01 简单了解DOM的更多相关文章

  1. 廖雪峰js教程笔记11 操作DOM(包含作业)

    由于HTML文档被浏览器解析后就是一棵DOM树,要改变HTML的结构,就需要通过JavaScript来操作DOM. 始终记住DOM是一个树形结构.操作一个DOM节点实际上就是这么几个操作: 更新:更新 ...

  2. 细看JS中的BOM、DOM对象

                                        DOM对象模型  DOM(Document Object Model),是指文档对象模型,是W3C组织推荐的处理可扩展标志语言的 ...

  3. JS学习四(BOM DOM)

    BOM                Screen对象 console.log(window.width);//屏幕宽度 console.log(window.height);//屏幕高度 conso ...

  4. js学习笔记----JavaScript中DOM扩展的那些事

    什么都不说,先上总结的图~   Selectors API(选择符API) querySelector()方法 接收一个css选择符,返回与该模式匹配的第一个元素,如果没有找到匹配的元素,返回null ...

  5. js实现类型jq的dom加载完成

    有时候我们只想在 dom 加载完成后运行 js ,而不是等所有图片加载完成.所以不需要 onload , onload 会加载图片等其他媒体.很消耗时间. 原:http://blog.csdn.net ...

  6. 原生JS操作iframe里的dom

    转:http://www.css88.com/archives/2343 一.父级窗口操作iframe里的dom JS操作iframe里的dom可是使用contentWindow属性,contentW ...

  7. Js的核心:找到DOM

    掌握 JavaScript 的核心之一:DOM,能够熟悉DOM相关操作,了解JavaScript事件机制 一.使用getElementById().getElementsByTagName().chi ...

  8. javascript中0级DOM和2级DOM事件模型浅析 分类: C1_HTML/JS/JQUERY 2014-08-06 15:22 253人阅读 评论(0) 收藏

    Javascript程序使用的是事件驱动的设计模式,为一个元素添加事件监听函数,当这个元素的相应事件被触发那么其添加的事件监听函数就被调用: <input type="button&q ...

  9. JS — 事件的相关概念和DOM

    JS是以事件驱动为核心的一门语言. 事件的三要素:事件源.事件.事件驱动程序. 例如: <body> <div id="box1"></div> ...

随机推荐

  1. java_web总结(一)

    1.struts1ajax返回值 public ActionForward preChangeAccountPwd(ActionMapping mapping, ActionForm form, Ht ...

  2. python之字符串详解2

    逻辑判断字符串类型,返回布尔值 1. islower 描述:判断所有字符是否为小写 语法: def islower(self): # real signature unknown; restored ...

  3. PPT中翻书动画的制作

    一.新建一个空白的PowerPoint文档.   二.制作两个页面:   1.点击“自选图形”右边的小三角,选择“基本图形”下的“折角形”图形,在PowerPoint中画出一个书页样的图形,宽度最好小 ...

  4. barmanager工具栏及gridcontrol部分属性设置

    1.工具栏部分属性设置,如:右键菜单,禁止移动等   2.gridControl属性设置,如选中行颜色,禁止移动隐藏等      

  5. 【WC2015】混淆与破解 (Goldreich-Levin 算法)

    这个嘛= =直接贴VFK的题解就行了吧,感觉自己还是差别人太多 http://vfleaking.blog.uoj.ac/blog/104 讲得挺明白了的说,但还是挺难理解的说,中间实现部分简直不要太 ...

  6. 2017-2-21 C#基础 if条件语句,作用域

    今天学了if 条件语句和作用域.作用域可以用一句话来概括:儿子可以用爹的所有东西,爹不可以用儿子的任何东西.If条件语句我用几个练习题来解释. 1."请输入年份:" 判断是否是闰年 ...

  7. 基于Hadoop的改进Apriori算法

    一.Apriori算法性质 性质一: 候选的k元组集合Ck中,任意k-1个项组成的集合都来自于Lk. 性质二: 若k维数据项目集X={i1,i2,-,ik}中至少存在一个j∈X,使得|L(k-1)(j ...

  8. Linux Tomcat安装,Linux配置Tomcat,Linux Tomcat修改内存,Linux tomcat修改端口

    Linux Tomcat安装,Linux配置Tomcat,Linux Tomcat修改内存,Linux tomcat修改端口 >>>>>>>>>& ...

  9. 第22篇 js中的this指针的用法

    前面把js的相关知识总结了下,今天把js中的上下文的this,对于强类型语言,this的用法非常的单一,因为他们没有js特有的动态绑定. 首先看下面代码: function funcA() { thi ...

  10. Protobuf学习 - 入门

    古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 -- 苏轼·<晁错论> 从公司的项目源码中看到了这个东西,觉得挺好用的,写篇博客做下小总结.下面的操作以C++为编程语言,protoc的版 ...