DOM(文档对象模型(Document Object Model))

  文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口。在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM。Document Object Model的历史可以追溯至1990年代后期微软与Netscape的“浏览器大战”,双方为了在JavaScriptJScript一决生死,于是大规模的赋予浏览器强大的功能。微软在网页技术上加入了不少专属事物,既有VBScriptActiveX、以及微软自家的DHTML格式等,使不少网页使用非微软平台及浏览器无法正常显示。DOM即是当时蕴酿出来的杰作

1、查找元素

①  直接查找

document.getElementById             根据ID获取一个标签
document.getElementsByName 根据name属性获取标签集合
document.getElementsByClassName 根据class属性获取标签集合
document.getElementsByTagName 根据标签名获取标签集合

  间接查找

parentNode          // 父节点
childNodes // 所有子节点
firstChild // 第一个子节点
lastChild // 最后一个子节点
nextSibling // 下一个兄弟节点
previousSibling // 上一个兄弟节点 parentElement // 父节点标签元素
children // 所有子标签
firstElementChild // 第一个子标签元素
lastElementChild // 最后一个子标签元素
nextElementtSibling // 下一个兄弟标签元素
previousElementSibling // 上一个兄弟标签元素

③  扩展练习

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id = "i1">我是i1</div>
<a>aaaaa</a>
<a>bbbbb</a>
<a>ccccc</a>
</body>
</html>

1、直接查找练习.html

      //获取ID
>document.getElementById('i1');
< <div id=​"i1">​我是i1​</div>​
      //获取内容
>document.getElementById('i1').innerText
<"我是i1"
      //重新赋值
>document.getElementById('i1').innerText = '新内容'
<"新内容"
      //获取tagname集合
>document.getElementsByTagName('a');
<[<a>​aaaaa​</a>​, <a>​bbbbb​</a>​, <a>​ccccc​</a>​]
      //获取集合指定索引元素
>document.getElementsByTagName('a')[1]
< <a>​bbbbb​</a>​
      //对单个元素重新赋值
>document.getElementsByTagName('a')[1].innerText = 66666;
<66666
      //对集合中所有文件赋值
>tags = document.getElementsByTagName('a');
<[<a>​aaaaa​</a>​, <a>​66666​</a>​, <a>​ccccc​</a>​]
>for(var i=0;i<tags.length;i++){tags[i].innerText=99999;}
<99999
>tags
<[<a>​99999​</a>​, <a>​99999​</a>​, <a>​99999​</a>​]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
<div>c1Sibling</div>
<div>c1</div>
</div>
<div>
<div>c2Sibling</div>
<div id="i1">c2</div>
</div>
<div>
<div>c3Sibling</div>
<div>c3</div>
</div>
</body>
</html>

2、间接查找练习.html

    //获取ID
>tag = document.getElementById('i1');
< <div id=​"i1">​c2​</div>​
//获取ID的父项
>tag.parentElement
< <div>​
<div>​c2Sibling​</div>​
<div id=​"i1">​c2​</div>​
</div>​
//获取父项的子节点
>tag.parentElement.children
< [<div>​c2Sibling​</div>​,<div id=​"i1">​c2​</div>​]
//获取父项的大兄弟
>tag.parentElement.previousElementSibling
> <div>​
<div>​c1Sibling​</div>​
<div>​c1​</div>​
</div>​

  

2、内容操作

①  内容

innerText   文本
outerText
innerHTML HTML内容
innerHTML
value 值

②  属性  

attributes                // 获取所有标签属性
setAttribute(key,value) // 设置标签属性
getAttribute(key) // 获取指定标签属性 /*
var atr = document.createAttribute("class");
atr.nodeValue="democlass";
document.getElementById('n1').setAttributeNode(atr);
*/
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<input type="button" value="全选" onclick="CheckAll();"/>
<input type="button" value="取消" onclick="CancelAll();"/>
<input type="button" value="反选" onclick="ReverseCheck();"/> <table border="1" >
<thead> </thead>
<tbody id="tb">
<tr>
<td><input type="checkbox" /></td>
<td>111</td>
<td>222</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td>111</td>
<td>222</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td>111</td>
<td>222</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td>111</td>
<td>222</td>
</tr>
</tbody>
</table>
<script>
function CheckAll(ths){
var tb = document.getElementById('tb');
var trs = tb.childNodes;
for(var i =0; i<trs.length; i++){ var current_tr = trs[i];
if(current_tr.nodeType==1){
var inp = current_tr.firstElementChild.getElementsByTagName('input')[0];
inp.checked = true;
}
}
} function CancelAll(ths){
var tb = document.getElementById('tb');
var trs = tb.childNodes;
for(var i =0; i<trs.length; i++){ var current_tr = trs[i];
if(current_tr.nodeType==1){
var inp = current_tr.firstElementChild.getElementsByTagName('input')[0];
inp.checked = false;
}
}
} function ReverseCheck(ths){
var tb = document.getElementById('tb');
var trs = tb.childNodes;
for(var i =0; i<trs.length; i++){
var current_tr = trs[i];
if(current_tr.nodeType==1){
var inp = current_tr.firstElementChild.getElementsByTagName('input')[0];
if(inp.checked){
inp.checked = false;
}else{
inp.checked = true;
}
}
}
} </script>
</body>
</html> Demo Demo

Demo

3、Class操作

className                // 获取所有类名
classList.remove(cls) // 删除指定类
classList.add(cls) // 添加类

简单练习:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
<div>c1Sibling</div>
<div>c1</div>
</div>
<div>
<div>c2Sibling</div>
<div id="i1">c2</div>
</div>
<div>
<div>c3Sibling</div>
<div>c3</div>
</div>
</body>
</html>

class简单操作.html

        //获取ID
>document.getElementById('i1');
< <div id=​"i1">​c2​</div>​
//赋值变量
>tag = document.getElementById('i1');
< <div id=​"i1">​c2​</div>​
//设置class样式
>tag.className = 'c1';
> "c1"
//设置成功
>tag
< <div id=​"i1" class=​"c1">​c2​</div>​
//修改class样式
>tag.className = 'c2';
< "c2"
>tag
< <div id=​"i1" class=​"c2">​c2​</div>​
//获取样式列表
>tag.classList
< ["c2"]
//样式列表集合中添加样式
>tag.classList.add('c3')
< undefined
>tag
< <div id=​"i1" class=​"c2 c3">​c2​</div>​
//样式列表集合中删除样式
>tag.classList.remove('c2');
< undefined
>tag
< <div id=​"i1" class=​"c3">​c2​</div>​

做完上面例子发现不得了了,我们直接可以对样式进行添加修改了,而且现在就可以做动态模块框了,点击按钮可以触发一系列动态效果,吊炸天了呼~,开搞开搞!!!

做之前还得了解这个知识点:

<div onclick="func();">点我</div>
<script>
function func() { }
</script>

上面表示当鼠标点击到div后,执行func()函数

做个模态对话框:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.c1 {
position: fixed;
background-color: #423A3A;
right: 0;
left: 0;
top:0;
bottom: 0;
opacity: 0.6;
z-index: 9;
}
.c2 {
position: fixed;
background-color: white;
height: 400px;
width: 500px;
top:50%;
left: 50%;
z-index: 10;
margin-top: -200px;
margin-left: -250px;
}
.hide {
display: none;
}
</style>
</head>
<body>
<div>
<input type="button" value="打开" onclick="ShowModel();"/>
</div> <div id="i1" class="c1 hide"></div> <div id="i2" class="c2 hide">
<input type="button" value="取消" onclick="HideModel();"/>
</div>
<script>
function ShowModel() {
document.getElementById('i1').classList.remove('hide');
document.getElementById('i2').classList.remove('hide');
}
function HideModel() {
document.getElementById('i1').classList.add('hide');
document.getElementById('i2').classList.add('hide');
}
</script>
</body> </html>

模态对话框.html

页面效果:点击打开后,出现弹出,点击取消,弹出关掉

再做个选项框吧-全选、反选、取消:

<body>
<div>
<table>
<thead>
<tr>
<td>选择</td>
<td>IP地址</td>
</tr>
</thead>
<tbody id="tb">
<tr>
<td><input type="checkbox"/></td>
<td>192.168.2.201</td>
</tr>
<tr>
<td><input type="checkbox"/></td>
<td>192.168.2.202</td>
</tr>
<tr>
<td><input type="checkbox"/></td>
<td>192.168.2.203</td>
</tr>
</tbody>
</table>
<input type="button" value="全选" onclick="ChooseAll();"/>
<input type="button" value="取消" onclick="CancleAll();"/>
<input type="button" value="反选" onclick="ReverseAll();"/>
</div>
<script>
function ChooseAll() {
var tbody = document.getElementById('tb');
var tr_list = tbody.children;
for(var i=0;i<tr_list.length;i++){
var current_tr = tr_list[i];
var checkbox = current_tr.children[0].children[0];
checkbox.checked = true
}
}
function CancleAll() {
var tbody = document.getElementById('tb');
var tr_list = tbody.children;
for(var i=0;i<tr_list.length;i++){
var current_tr = tr_list[i];
var checkbox = current_tr.children[0].children[0];
checkbox.checked = false
}
}
function ReverseAll() {
var tbody = document.getElementById('tb');
var tr_list = tbody.children;
for(var i=0;i<tr_list.length;i++){
var current_tr = tr_list[i];
var checkbox = current_tr.children[0].children[0]; if(checkbox.checked ){
checkbox.checked=false
}else {
checkbox.checked=true
}
}
}
</script>
</body>

页面效果:点击全选所有选项框选上;点击取消后恢复;点击反选,只选择未选上的选项框;一个字叼叼叼!!

根本停不下来,后台管理左侧菜单-点击菜单显示选项,其他菜单关闭

<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.hide{
display: none;
}
.item .header{
height: 35px;
background-color: #2459a2;
color: white;
line-height: 35px;
}
</style>
</head>
<body>
<div style="width: 300px">
<div class="item">
<div id='i1' class="header" onclick="ChangeMenu('i1');">菜单一</div>
<div class="content hide">
<div>内容1</div>
<div>内容1</div>
<div>内容1</div>
</div>
</div>
<div class="item">
<div id='i2' class="header" onclick="ChangeMenu('i2');">菜单二</div>
<div class="content hide">
<div>内容2</div>
<div>内容2</div>
<div>内容2</div>
</div>
</div>
<div class="item">
<div id='i3' class="header" onclick="ChangeMenu('i3');">菜单三</div>
<div class="content hide">
<div>内容3</div>
<div>内容3</div>
<div>内容3</div>
</div>
</div>
</div>
<script>
function ChangeMenu(nid) {
var current_header = document.getElementById(nid)
var item_list = current_header.parentElement.parentElement.children
for(var i=0;i<item_list.length;i++){
var current_item = item_list[i];
current_item.children[1].classList.add('hide');
}
current_header.nextElementSibling.classList.remove('hide');
}
</script>
</body>

页面效果:点击菜单一、菜单一展开,其他菜单关闭;点击其他菜单亦可

 

Python开发【前端】:HTML--》》http://www.cnblogs.com/lianzhilei/p/6038646.html

Python开发【前端】:CSS--》》http://www.cnblogs.com/lianzhilei/p/6046131.html

Python开发【前端】:JavaScript--》》http://www.cnblogs.com/lianzhilei/p/6071530.html

Python开发【前端】:DOM的更多相关文章

  1. Python开发: DOM

    文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关心的是,DOM把 ...

  2. Python开发【前端】:jQuery

    jQuery简介 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是&qu ...

  3. Python开发【前端】:JavaScript

    JavaScript入门 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本 ...

  4. Python开发【前端】:CSS

    css样式选择器 标签上设置style属性: <body> <div style="background-color: #2459a2;height: 48px;" ...

  5. Python开发【前端】:HTML

    HTML HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏 ...

  6. Python开发【第一篇】:目录

    本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! Python开发[第一篇]:目录 Python开发[第二篇]:初识Python ...

  7. web开发前端面试知识点目录整理

    web开发前端面试知识点目录整理 基本功考察 关于Html 1. html语义化标签的理解; 结构化的理解; 能否写出简洁的html结构; SEO优化 2. h5中新增的属性; 如自定义属性data, ...

  8. 移动端 Web 开发前端知识整理

    文章来源: http://www.restran.net/2015/05/14/mobile-web-front-end-collections/ 最近整理的移动端 Web 开发前端知识,不定期更新. ...

  9. Python 开发轻量级爬虫07

    Python 开发轻量级爬虫 (imooc总结07--网页解析器BeautifulSoup) BeautifulSoup下载和安装 使用pip install 安装:在命令行cmd之后输入,pip i ...

随机推荐

  1. STM32F407Discovery开发板使用环境搭建

    差不多4年前买了STM32F407Discovery这块开发板,也用它作为我的毕业设计的一部分,今晚整理一下东西,觉得这么不错的东西应该再次利用起来,做个智能家居系统的一部分什么的也不错,于是,记录一 ...

  2. XCode 中的代码块导出与导入

    目标文件放置位置 ~/Library/Developer/Xcode/UserData/CodeSnippets CodeSnippets 这整个文件夹都是 直接搬移整个文件夹 操作方法: 解压缩并复 ...

  3. linux 学习 day1

  4. Epub基础知识介绍

    转载自:http://www.cnblogs.com/linlf03/archive/2011/12/13/2286218.html 一.什么是epub epub是一个完全开放和免费的电子书标准.它可 ...

  5. 特征检测之HOG

    参考: http://blog.csdn.net/liulina603/article/details/8291093 http://blog.csdn.net/woxincd/article/det ...

  6. SVG实现导航动画

    效果图动画后 html <!DOCTYPE html> <html > <head> <meta charset="UTF-8"> ...

  7. Go语言 使用内置Http组件

    package main import ( "net/http" ) func SayHello(w http.ResponseWriter, req *http.Request) ...

  8. poj 3253 Fence Repair

    Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 42979   Accepted: 13999 De ...

  9. iOS 多快好省的宏定义

    http://my.oschina.net/yongbin45/blog/150149 // 字符串:#ifndef nilToEmpty#define nilToEmpty(object) (obj ...

  10. Python爬虫学习(4): python中re模块中的向后引用以及零宽断言

    使用小括号的时候,还有很多特定用途的语法.下面列出了最常用的一些: 表4.常用分组语法 分类 代码/语法 说明 捕获 (exp) 匹配exp,并捕获文本到自动命名的组里 (?<name>e ...