1.HTML文档被浏览器解析后就是一棵DOM树,要改变HTML的结构,就须要经过JavaScript来操做DOM。DOM是一个树形结构。操做一个DOM节点实际上就是这么几个操做:css
a更新:更新该DOM节点的内容,至关于更新了该DOM节点表示的HTML的内容; b遍历:遍历该DOM节点下的子节点,以便进行进一步操做; c添加:在该DOM节点下新增一个子节点,至关于动态增长了一个HTML节点; d删除:将该节点从HTML中删除,至关于删掉了该DOM节点的内容以及它包含的全部子节点。
ID在HTML文档中是惟一的,因此document.getElementById()能够直接定位惟一的一个DOM节点。document.getElementsByTagName()和document.getElementsByClassName()老是返回一组DOM节点。要精确地选择DOM,能够先定位父节点,再从父节点开始选择,以缩小范围。浏览器
第二种方法是使用querySelector()和querySelectorAll().app
a.一种是修改innerHTML属性,这个方式很是强大,不但能够修改一个DOM节点的文本内容,还能够直接经过HTML片断修改DOM节点内部的子树;dom
// 获取<p id="p-id">...</p> var p = document.getElementById('p-id'); // 设置文本为abc: p.innerHTML = 'ABC'; // <p id="p-id">ABC</p> // 设置HTML: p.innerHTML = 'ABC <span style="color:red">RED</span> XYZ'; // <p>...</p>的内部结构已修改
第二种是修改innerText或textContent属性,这样能够自动对字符串进行HTML编码,保证没法设置任何HTML标签.二者的区别在于读取属性时,innerText不返回隐藏元素的文本,而textContent返回全部文本。编码
// 获取<p id="p-id">...</p> var p = document.getElementById('p-id'); // 设置文本: p.innerText = '<script>alert("Hi")</script>'; // HTML被自动编码,没法设置一个<script>节点: // <p id="p-id"><script>alert("Hi")</script></p>
修改CSS也是常常须要的操做。DOM节点的style属性对应全部的CSS,能够直接获取或设置。由于CSS容许font-size这样的名称,但它并不是JavaScript有效的属性名,因此须要在JavaScript中改写为驼峰式命名fontSize:spa
// 获取<p id="p-id">...</p> var p = document.getElementById('p-id'); // 设置CSS: p.style.color = '#ff0000'; p.style.fontSize = '20px'; p.style.paddingTop = '2em';
b.插入dom元素code
var d = document.createElement('style'); d.setAttribute('type', 'text/css'); d.innerHTML = 'p { color: red }'; document.getElementsByTagName('head')[0].appendChild(d);
<!-- HTML结构 --> <ol id="test-list"> <li class="lang">Scheme</li> <li class="lang">JavaScript</li> <li class="lang">Python</li> <li class="lang">Ruby</li> <li class="lang">Haskell</li> </ol> 按字符串顺序从新排序DOM节点: var list = document.querySelector("#test-list"); var arr = list.innerHTML.match(/(<.+?>)(.+?)(<.+?>)/g); list.innerHTML=arr.sort().join("");
d. 要删除一个节点,首先要得到该节点自己以及它的父节点,而后,调用父节点的removeChild把本身删掉. 删除后的节点虽然不在文档树中了,但其实它还在内存中,能够随时再次被添加到别的位置。 你遍历一个父节点的子节点并进行删除操做时,要注意,children属性是一个只读属性,而且它在子节点变化时会实时更新.排序