DOM
DOM(文档对象模型(Document Object Model))
文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口。在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM。Document Object Model的历史可以追溯至1990年代后期微软与Netscape的“浏览器大战”,双方为了在JavaScript与JScript一决生死,于是大规模的赋予浏览器强大的功能。微软在网页技术上加入了不少专属事物,既有VBScript、ActiveX、以及微软自家的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>
//获取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>
//获取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
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>
//获取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>
页面效果:点击打开后,出现弹出,点击取消,弹出关掉
再做个选项框吧-全选、反选、取消:
<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