操作DOM对象(重点)
操作DOM对象(重点)
-
由于HTML文档被浏览器解析后就是一棵DOM树,要改变HTML的结构,就需要通过JavaScript来操作DOM。
-
获得DOM
-
第一种方法
// 返回ID为'test'的节点: var test = document.getElementById('test'); // 先定位ID为'test-table'的节点,再返回其内部所有tr节点: var trs = document.getElementById('test-table').getElementsByTagName('tr'); // 先定位ID为'test-div'的节点,再返回其内部所有class包含red的节点: var reds = document.getElementById('test- div').getElementsByClassName('red'); // 获取节点test下的所有直属子节点: var cs = test.children; // 获取节点test下第一个、最后一个子节点: var first = test.firstElementChild; var last = test.lastElementChild; -
第二种方法
// 通过querySelector获取ID为q1的节点: var q1 = document.querySelector('#q1'); // 通过querySelectorAll获取q1节点内的符合条件的所有节点: var ps = q1.querySelectorAll('div.highlighted > p');
-
-
更新DOM
//修改文本一: innerHTML 属性 // 获取<p id="p-id">...</p> var p = document.getElementById('p-id'); // 设置文本为abc: p.innerText = 'ABC'; // <p id="p-id">ABC</p> // 设置HTML: p.innerHTML = 'ABC <span style="color:red">RED</span> XYZ'; // <p>...</p>的内部结构已修改 p.style.color='red'; //修改样式,属性使用字符串包裹-
修改CSS:DOM节点的 style 属性对应所有的CSS,可以直接获取或设置。
/*因为CSS允许 font-size 这样的名称,但它并非JavaScript有效的属性名,所以需要在JavaScript中改写为 驼峰式命名 fontSize */ // 获取<p id="p-id">...</p> var p = document.getElementById('p-id'); // 设置CSS: p.style.color = '#ff0000'; p.style.fontSize = '20px'; p.style.paddingTop = '2em';
-
-
删除DOM
要删除一个节点,首先要获得该节点本身以及它的父节点,然后,调用父节点的 removeChild 把自己删掉
// 拿到待删除节点: var self = document.getElementById('myself'); // 拿到父节点: var parent = self.parentElement; // 删除: var removed = parent.removeChild(self); removed === self; // true
var parent=document.getElementById('parent'); parent.removeChild(parent.children[0]); parent.removeChild(parent.children[1]); //<--浏览器报错 /*浏览器报错: parent.children[1] 不是一个有效的节点。 原因就在于,当 First 节点被删除后, parent.children 的节点数量已经从2变为了1,索引 [1] 已经不存在了。 因此,删除多个节点时,要注意 children 属性时刻都在变化*/ -
插入DOM
-
innerHTML 会直接替换掉原来的所有子节点。如果这个DOM节点是空的,则可以使用
-
appendChild ,把一个子节点添加到父节点的最后一个子节点。
<!-- HTML结构 --> <p id="js">JavaScript</p> <div id="list"> <p id="java">Java</p> <p id="python">Python</p> <p id="scheme">Scheme</p> </div> <script> //把 JavaScript 添加到的最后一项 var js = document.getElementById('js'), //获得将要插入的节点 list = document.getElementById('list'); //获得父节点 list.appendChild(js);//父节点.appendChild(需插入结点) </script> //<!-- 插入结果--> <div id="list"> <p id="java">Java</p> <p id="python">Python</p> <p id="scheme">Scheme</p> <p id="js">JavaScript</p> </div>//创建一个标签节点(通过这个属性,可以设置任意的值) var newP = document.createElement('p'); newP.id = 'newP'; newP.innerText = 'hello'; list.appendChild(newP);//创建一个标签节点(通过这个属性,可以设置任意的值) var newScript = document.createElement('script'); newScript.setAttribute('type','text/javascript'); list.appendChild(newScript); -
insertBefore,把一个子节点添加到指定节点之前
//子节点会插入到referenceElement 之前。 parentElement.insertBefore(newElement, referenceElement);
-

浙公网安备 33010602011771号