获取 DOM 1 2 3 4 5 6 7 8 <div id ="id" > testID</div > <div class ="className" > testClass</div > <ul > <li > 1</li > <li > 2</li > <li > 2</li > </ul > <input type ="text" name ="name" />
1 2 3 4 document .getElementById("id" ); document .getElementsByClassName("className" ); document .getElementsByTagName("ul" ); document .getElementsByName("name" );
获取子节点 通过 childNodes 获取子节点 使用 childNodes 获取子节点的时候,childNodes 返回的是子节点的集合,是一个数组的格式。他会把换行和空格也当成是节点信息。
1 2 3 4 5 <ul > <li > 1</li > <li > 2</li > <li > 2</li > </ul >
1 2 document .getElementsByTagName("ul" )[0 ].childNodes;
通过 children 来获取子节点(推荐) 利用 children 来获取子元素是最方便的,他也会返回出一个数组。对其获取子元素的访问只需按数组的访问形式即可。
1 2 3 4 5 <ul > <li > 1</li > <li > 2</li > <li > 2</li > </ul >
1 2 document .getElementsByTagName("ul" )[0 ].children;
获取第一个子节点 1.firstChild 来获取第一个子元素,但是在有些情况下我们打印的时候会显示 undefined,这是什么情况呢??其实 firstChild 和 childNodes 是一样的,在浏览器解析的时候会把他当换行和空格一起解析,其实你获取的是第一个子节点,只是这个子节点是一个换行或者是一个空格而已。
2.使用 firstElementChild 来获取第一个子元素的时候,这就没有 firstChild 的那种情况了。会获取到父元素第一个子元素的节点 这样就能直接显示出来文本信息了。他并不会匹配换行和空格信息。
1 2 3 4 5 <ul > <li > 1</li > <li > 2</li > <li > 2</li > </ul >
1 2 3 document .getElementsByTagName("ul" )[0 ].firstChild;document .getElementsByTagName("ul" )[0 ].firstElementChild;
获取最后一个子节点 lastChild 获取最后一个子节点的方式其实和 firstChild 是类似的。同样的 lastElementChild 和 firstElementChild 也是一样的。不再赘余。
1 2 3 4 5 <ul > <li > 1</li > <li > 2</li > <li > 2</li > </ul >
1 2 3 document .getElementsByTagName("ul" )[0 ].lastChild;document .getElementsByTagName("ul" )[0 ].lastElementChild;
获取父节点 parentNode 获取父节点(推荐) 获取的是当前元素的直接父元素。parentNode 是 w3c 的标准。
1 2 3 4 5 <ul > <li > 1</li > <li > 2</li > <li > 2</li > </ul >
1 document .getElementsByTagName("li" )[0 ].parentNode;
parentElement 获取父节点 parentElement 和 parentNode 一样,只是 parentElement 是 ie 的标准。
1 2 3 4 5 <ul > <li > 1</li > <li > 2</li > <li > 2</li > </ul >
1 document .getElementsByTagName("li" )[0 ].parentElement;
offsetParent 获取所有父节点 一看 offset 我们就知道是偏移量 其实这个是于位置有关的上下级 ,直接能够获取到所有父亲节点, 这个对应的值是 body 下的所有节点信息。
1 2 3 4 5 <ul > <li > 1</li > <li > 2</li > <li > 2</li > </ul >
1 document .getElementsByTagName("li" )[0 ].offsetParent;
获取兄弟节点 通过获取父亲节点再获取子节点来获取兄弟节点 1 2 3 4 5 <ul > <li > 1</li > <li > 2</li > <li > 2</li > </ul >
1 document .getElementsByTagName("li" )[0 ].parentNode.children[1 ];
获取上一个兄弟节点 在获取前一个兄弟节点的时候可以使用 previousSibling 和 previousElementSibling。他们的区别是 previousSibling 会匹配字符,包括换行和空格,而不是节点。previousElementSibling(推荐) 则直接匹配节点。
1 2 3 4 5 <ul > <li > 1</li > <li > 2</li > <li > 2</li > </ul >
1 2 document .getElementsByTagName("li" )[0 ].previousElementSibling;document .getElementsByTagName("li" )[0 ].previousSibling;
获取下一个兄弟节点 同 previousSibling 和 previousElementSibling,nextSibling 和 nextElementSibling 也是类似的。
1 2 3 4 5 <ul > <li > 1</li > <li > 2</li > <li > 2</li > </ul >
1 2 document .getElementsByTagName("li" )[0 ].nextElementSibling;document .getElementsByTagName("li" )[0 ].nextSibling;
更换 DOM 内容 替换内容 1 <div id ="id" > 这是原本内容</div >
1 2 3 4 5 document .getElementById("id" ).innerHTML = "<div>这是替换内容</div>" ;document .getElementById("id" ).innerText = "<div>这是替换内容</div>" ;document .getElementById("id" ).outerHTML = "<div>这是替换内容</div>" ;document .getElementById("id" ).outerText = "<div>这是替换内容</div>" ;
添加内容 1.通过创建 DOM 或获取已有 DOM 方式(appendChild、insertBefore)
1 2 <div id ="id" > </div > <div id ="div" > </div >
1 2 3 4 5 let div = document .getElementById("div" );document .getElementById("id" ).appendChild(div);document .getElementById("id" ).insertBefore(div);
或
1 2 3 4 5 6 let div = document .createElement("div" );div.innerHTML = "<p>Test</p>" ; document .getElementById("id" ).appendChild(div);document .getElementById("id" ).insertBefore(div);
2.通过 string 字符类型添加(beforeBegin、afterBegin、beforeEnd、afterEnd)
1 <div id ="id" > <p > 这是子元素</p > </div >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 document .getElementById("id" ) .insertAdjacentHTML("beforeBegin" , "<div>beforeBegin</div>" ); document .getElementById("id" ) .insertAdjacentHTML("afterBegin" , "<div>afterBegin</div>" ); document .getElementById("id" ) .insertAdjacentHTML("beforeEnd" , "<div>beforeEnd</div>" ); document .getElementById("id" ) .insertAdjacentHTML("afterEnd" , "<div>afterEnd</div>" );
删除内容
1 document .getElementById("id" ).remove();
更换 DOM 样式 1 <div id ="id" class ="myclass" > </div >
1 2 3 4 5 6 7 8 document .getElementById("id" ).classList.add("className" );document .getElementById("id" ).classList.remove("className" );document .getElementById("id" ).className = "className" ;document .getElementById("id" ).style.width = "20px" ;
获取 DOM 属性 1 2 <div id ="id" data-value ="test" > </div > <img id ="img" src ="../1.png" alt ="这是图片" />
1 2 3 document .getElementById("id" ).getAttribute("data-value" );document .getElementById("img" ).getAttribute("src" );document .getElementById("img" ).getAttribute("alt" );