以Python角度学习Javascript(二)之DOM
HTML DOM 定义了访问和操作 HTML 文档的标准方法。
DOM 将 HTML 文档表达为树结构。
文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口。它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。我们最为关心的是,DOM把网页和脚本以及其他的编程语言联系了起来。DOM属于浏览器,而不是JavaScript语言规范里的规定的核心内容。
一、查找元素
1、直接查找(ID, class等)
document.getElementById 根据ID获取一个标签
document.getElementsByName 根据name属性获取标签集合
document.getElementsByClassName 根据class属性获取标签集合
document.getElementsByTagName 根据标签名获取标签集合 //比如a标签啊,p标签啊等
document.getElementsByClassName("current")[0].setAttribute("class","");
document.getElementById("course").setAttribute("class","current");
2、间接查找(父节点等)
parentNode // 父节点
<div id="aa"> <div id="test"></div> </div> <script type="text/javascript"> console.log(document.getElementById('test').parentNode); </script> 结果: <div id="aa">....< /div>
childNodes // 所有子节点
<div> 123 <div class="c1">asdf</div> <div class="c1" id="i1"> <p>asdf</p> <div name="n1"> <span>asd</span> </div> <div name="n1"> <a>1</a> <a>11111</a> </div> </div> <div class="c1">asdf</div> </div> ------------------------------------------------ <script type="text/javascript"> var elm = document.getElementById('i1'); var p1_text = elm.parentNode; var p1_notext = elm.parentElement; //console.log(p1_text); //console.log(p1_notext); var p1_child_text = p1_text.childNodes;//获取所有子节点 for (var i=0; i<p1_child_text.length;){ console.log(p1_child_text[i]) } // for (var i=0;i<p1_child_text.length;i++) { // cur = p1_child_text[i] // if (cur.nodeType == 1){ //如果是文本的话,比如div标签里面的123的话,cur.nodeType == 3,如果是标签的话,cur.nodeType ==1 // console.log(p1_child_text[i]) // } // } var p1_child_notext = p1_notext.children; for(var i=0;i<p1_child_notext.length;i++){ console.log(p1_child_notext[i]) } </script>
firstChild // 第一个子节点
lastChild // 最后一个子节点
nextSibling // 下一个兄弟节点
previousSibling // 上一个兄弟节点
parentElement // 父节点标签元素 children // 所有子标签 firstElementChild // 第一个子标签元素 lastElementChild // 最后一个子标签元素 nextElementtSibling // 下一个兄弟标签元素 previousElementSibling // 上一个兄弟标签元素
二、操作
1、内容 (获取、设置标签的text, HTML等)
innerText 文本
<div id="test"> <span style="color:red">test1</span> test2 </div>
document.getElementById('test').innerHTML; 返回值:<span style="color:red">test1</span> test2 document.getElementById('test').innerText; 返回值:test1 test2, 其中span标签被去除了 document.getElementById('test').outerHTML; 返回值:<div id="test"><span style="color:red">test1</span> test2</div>
outerText
innerHTML 对象内部HTML内容
outerHTML 除了包含innerHTML的全部内容外, 还包含对象标签本身。
value 值
2、属性 -->自定义属性(获得属性等)
attributes // 获取所有标签属性
<a href="#" class=".." id=""></a>
</div>
<script type="text/javascript">
document.write(document.getElementsByTagName("div")[3].attributes.length);
setAttribute(key,value) // 设置标签属性
<!DOCTYPE html> <html> <body> <input value="OK"> <p id="demo">点击按钮来设置按钮的 type 属性。</p> <button onclick="myFunction()">试一下</button> <script> function myFunction() { document.getElementsByTagName("INPUT")[0].setAttribute("type","button"); } </script> <p>Internet Explorer 8 以及更早的版本不支持此方法。</p> </body> </html>
getAttribute(key) // 获取指定标签属性
<!DOCTYPE html> <html> <body> 请阅读 <a href="/jsref/dom_obj_attributes.asp" target="_blank">Attr 对象</a>, <p id="demo">请点击按钮来显示上面这个链接的 target 属性值。</p> <button onclick="myFunction()">试一下</button> <script> function myFunction() { var a=document.getElementsByTagName("a")[0]; document.getElementById("demo").innerHTML=a.getAttribute("target"); } </script> </body> </html> 结果是:_blank
removeAttribute() //删除指点标签属性
/* 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
3、class操作(添加删除class等)
className // 获取所有类名 classList.remove(cls) // 删除指定类 classList.add(cls) // 添加类
4、标签操作(创建a标签操作标签等)
a.创建标签
// 方式一 var tag = document.createElement('a') tag.innerText = "wupeiqi" tag.className = "c1" tag.href = "http://www.cnblogs.com/wupeiqi" // 方式二 var tag = "<a class='c1' href='http://www.cnblogs.com/wupeiqi'>wupeiqi</a>"
b.操作标签
// 方式一 var obj = "<input type='text' />"; xxx.insertAdjacentHTML("beforeEnd",obj); xxx.insertAdjacentElement('afterBegin',document.createElement('p')) //注意:第一个参数只能是'beforeBegin'、 'afterBegin'、 'beforeEnd'、 'afterEnd' // 方式二 var tag = document.createElement('a') xxx.appendChild(tag) xxx.insertBefore(tag,xxx[1])
5、样式操作(css操作)
var obj = document.getElementById('i1') obj.style.fontSize = "32px"; obj.style.backgroundColor = "red";
<input onfocus="Focus(this);" onblur="Blur(this);" id="search" value="请输入关键字" style="color: gray;" /> <script> function Focus(ths){ ths.style.color = "black"; if(ths.value == '请输入关键字' || ths.value.trim() == ""){ ths.value = ""; } } function Blur(ths){ if(ths.value.trim() == ""){ ths.value = '请输入关键字'; ths.style.color = 'gray'; }else{ ths.style.color = "black"; } } </script>
6、位置操作
总文档高度 document.documentElement.offsetHeight 当前文档占屏幕高度 document.documentElement.clientHeight 自身高度 tag.offsetHeight 距离上级定位高度 tag.offsetTop 父定位标签 tag.offsetParent 滚动高度 tag.scrollTop /* clientHeight -> 可见区域:height + padding clientTop -> border高度 offsetHeight -> 可见区域:height + padding + border offsetTop -> 上级定位标签的高度 scrollHeight -> 全文高:height + padding scrollTop -> 滚动高度 特别的: document.documentElement代指文档根节点
具体也可以参考博客:http://www.cnblogs.com/renfanzi/p/5663472.html7、提交表单
document.geElementById('form').submit()
7、其他操作
console.log 输出框 alert 弹出框 confirm 确认框 // URL和刷新 location.href 获取URL location.href = "url" 重定向 location.reload() 重新加载 // 定时器 setInterval 多次定时器 clearInterval 清除多次定时器 setTimeout 单次定时器 clearTimeout 清除单次定时器
三、事件
对于事件需要注意的要点:
- this
- event
- 事件链以及跳出
this标签当前正在操作的标签,event封装了当前事件的内容。
作者:沐禹辰
出处:http://www.cnblogs.com/renfanzi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
出处:http://www.cnblogs.com/renfanzi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。