操作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号
浙公网安备 33010602011771号