js-dom学习

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">&lt;script&gt;alert("Hi")&lt;/script&gt;</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属性是一个只读属性,而且它在子节点变化时会实时更新.排序

相关文章
相关标签/搜索