1、如何获取DOM

  • 在文档上通过ID获取

document.getElementById();

  • class HTMLCollection 是一个伪数组集合

document.getElementsByClassName();

  • 通过标签名获取

    1. document.getElementsByTagName();
    1. <div id="app">one</div>
    2. <div class="one">one1</div>
    3. <div class="one">one2</div>
    4. <div class="one">one3</div>
    5. <p class="two">1</p>
    6. <p class="two">1</p>
    7. <p class="two">1</p>
    8. <script>
    9. /* 在文档上通过ID获取 */
    10. var app = document.getElementById("app");
    11. console.log(app);
    12. /* class HTMLCollection 数组 */
    13. var all = document.getElementsByClassName("one");
    14. console.log(all);
    15. /* 通过标签名获取 */
    16. var ps = document.getElementsByTagName("p");
    17. console.log(ps)
    18. </script>
  • 通过选择器获取

document.querySelectorAll();

  1. <div class="parent">
  2. <p>hello1</p>
  3. <p>hello2</p>
  4. </div>
  5. <script>
  6. /* 通过选择器获取 */
  7. var all = document.querySelectorAll(".parent p");
  8. console.log(all);
  9. </script>

2、事件

2-1.事件格式

element(获取的DOM).eventName(事件名) = function()(函数){
//执行代码
}

  1. <button id="btn">btn</button>
  2. <script>
  3. var btn = document.getElementById("btn")
  4. btn.onclick = function(){
  5. console.log("hello worle")
  6. }
  7. /*
  8. element(获取的DOM).eventName(事件名) = function()(函数){
  9. //执行代码
  10. }
  11. */
  12. </script>

image.pngimage.png

2-2.单击事件

element.onclick = function(){
}

  1. <button id="btn">btn</button>
  2. <script>
  3. /* 更改元素的内容,样式,结构 */
  4. var btn = document.getElementById("btn")
  5. btn.onclick = function(){
  6. /* this指向正在执行事件的当前对象 */
  7. console.log(this)
  8. this.innerHTML = "change"
  9. }
  10. /*
  11. innerHTML --可以改变元素的内容
  12. */
  13. </script>

image.pngimage.png

3、更改元素

3-1.单独更改元素

  1. <button id="app">发送验证码</button>
  2. <script>
  3. var app = document.getElementById("app");
  4. app.onclick = function(){
  5. this.innerHTML = "60";
  6. this.style.backgroundColor = "#999";
  7. this.style.color = "#fff";
  8. this.style.fontSize = "30px";
  9. }
  10. /*
  11. 更改css的语法
  12. element.style.cssName
  13. */
  14. </script>

image.pngimage.png

3-2集体更改元素

  1. <!-- 点击谁,就将谁隐藏 -->
  2. <ul>
  3. <li>html</li>
  4. <li>css</li>
  5. <li>javascript</li>
  6. </ul>
  7. <script>
  8. var lis = document.getElementsByTagName("li");
  9. /* tips:只能对单个对象执行事件,不能对集合执行事件 */
  10. console.log(lis)
  11. for( var i=0;i<lis.length;i++){
  12. lis[i].onclick = function () {
  13. console.log(this);
  14. this.style.display = "none";
  15. }
  16. }
  17. </script>

image.pngimage.png

4、获取父子兄弟节点

4-1.获取元素的父节点

  • child.parentNode;

    1. <div id="parent">
    2. <div id="child">child</div>
    3. </div>
    4. <!-- 获取父节点
    5. parentNode 获取元素的的父节点
    6. -->
    7. <script>
    8. var child = document.getElementById("child");
    9. console.log(child);
    10. var parent = child.parentNode;
    11. console.log(parent);
    12. </script>

    image.png

    4-2.获取子节点

  • parent.childNodes;获取父元素下所有类型的子节点

  • 空格为文本节点

    1. <div id="parent">
    2. <p class="one">1</p>
    3. <p class="one">2</p>
    4. <p class="one">3</p>
    5. </div>
    6. <script>
    7. /* tips:childNodes获取所有类型的节点 */
    8. var parent = document.getElementById("parent");
    9. var childs =parent.childNodes;
    10. console.log(childs);
    11. console.log(parent.firstChild)
    12. </script>

    image.png

    4-3.节点的类型

    节点的类型 nodeType
    1、元素节点 1
    2、属性节点 2
    3、文本节点 3

    1. <p id="app">hello world</p>
    2. <script>
    3. /* 节点的类型 nodeType
    4. 1、元素节点 1
    5. 2、属性节点 2
    6. 3、文本节点 3
    7. */
    8. var app = document.getElementById("app");
    9. console.log(app.nodeType);
    10. var app_id = app.getAttributeNode("id");
    11. console.log(app_id.nodeType);
    12. var txt = app.firstChild;
    13. console.log(txt.nodeType);
    14. </script>

    image.png

    4-4.选择指定元素节点

  • tips:childNodes获取所有类型的节点

  • 利用for循环只选取节点类型为1(元素节点)的输出

    1. <div id="parent">
    2. <p class="one">1</p>
    3. <p class="one">2</p>
    4. <p class="one">3</p>
    5. </div>
    6. <script>
    7. /* tips:childNodes获取所有类型的节点 */
    8. var parent = document.getElementById("parent");
    9. var childs =parent.childNodes;
    10. var arr=[];
    11. /* 利用for循环只选取节点类型为1(元素节点)的输出 */
    12. for(var i=0;i<childs.length;i++){
    13. if(childs[i].nodeType==1){
    14. console.log(childs[i]);
    15. arr.push(childs[i]);
    16. }
    17. }
    18. console.log(arr)
    19. </script>

    image.png

  • childNodes

  • children —只获取元素节点
  • firstChild —获取父元素的第一个子节点
  • firstElementChild —获取父元素下面的第一个元素节点
  • lastChild
  • lastElementChild

    1. <div id="parent">
    2. <p class="one">1</p>
    3. <p class="one">2</p>
    4. <p class="one">3</p>
    5. </div>
    6. <script>
    7. var parent = document.getElementById("parent");
    8. /*
    9. childNodes
    10. children --只获取元素节点
    11. firstChild --获取父元素的第一个子节点
    12. firstElementChild --获取父元素下面的第一个元素节点
    13. lastChild
    14. lastElementChild
    15. */
    16. var childs = parent.children;
    17. var firstChild = parent.firstChild;
    18. var firstElement = parent.firstElementChild;
    19. var lastChild = parent.lastChild;
    20. var lastElement = parent.lastElementChild;
    21. console.log(childs);
    22. console.log(firstChild);
    23. console.log(firstElement);
    24. console.log(lastChild);
    25. console.log(lastElement)
    26. </script>

    image.png

    4-5.兄弟节点

  • previousSibling —获取前一个兄弟节点

  • previousElementSibling —获取前一个兄弟元素节点

  • nextSibling —获取后一个兄弟节点

  • nextElementSibling —获取后一个兄弟元素节点

    1. <div>one</div>
    2. <div id="md">middle</div>
    3. <div>two</div>
    4. <script>
    5. /*
    6. previousSibling --获取前一个兄弟节点
    7. previousElementSibling --获取前一个兄弟元素节点
    8. nextSibling --获取后一个兄弟节点
    9. nextElementSibling --获取后一个兄弟元素节点
    10. */
    11. var md = document.getElementById("md")
    12. var siblings = md.previousSibling;
    13. var sibling = md.previousElementSibling;
    14. var nextsiblings = md.nextSibling;
    15. var nextSibling = md.nextElementSibling;
    16. console.log(siblings);
    17. console.log(sibling);
    18. console.log(nextsiblings);
    19. console.log(nextSibling);
    20. </script>

    image.png

    5、arr数组的增加

  • arr.push();

    1. <script>
    2. var arr = [];
    3. arr.push("html");
    4. console.log(arr);
    5. arr.push("css");
    6. console.log(arr)
    7. </script>

    image.png

    6、新增子节点

    6-1.新增子元素在最后

  • appendChild —在父元素的最后面添加一个子元素,必须是一个节点(Node)

  • createElement —创建一个元素
  • createTextNode —创建一个文本节点

    1. <div id="app">
    2. <p>one</p>
    3. <!-- <p>hello world</p> -->
    4. </div>
    5. <script>
    6. /*
    7. appendChild --在父元素的最后面添加一个子元素,必须是一个节点(Node)
    8. createElement --创建一个元素
    9. createTextNode --创建一个文本节点
    10. */
    11. var app = document.getElementById("app");
    12. var p = document.createElement("p");
    13. var p1 = document.createElement("p1")
    14. var txt = document.createTextNode("hello world");
    15. p.innerHTML = "hello world";
    16. console.log(p);
    17. app.appendChild(p);
    18. console.log(p.nodeType);
    19. p1.appendChild(txt);
    20. console.log(p1);
    21. app.appendChild(p1);
    22. </script>

    image.pngimage.png

  • appendChild —只能添加节点(Node)

  • append —可以添加节点和字符串

    1. <div id="app">
    2. </div>
    3. <script>
    4. /*
    5. appendChild --只能添加节点(Node)
    6. append --可以添加节点和字符串
    7. */
    8. var app = document.getElementById("app");
    9. var txt = document.createTextNode("hello world");
    10. app.appendChild(txt);
    11. app.append("good")
    12. </script>

    image.png

    6-2.新增子元素在最前

  • prepend —在父元素的最前面插入节点

    1. <div id="app">
    2. <!-- <p>前面</p> -->
    3. <div>first</div>
    4. </div>
    5. <script>
    6. /*
    7. prepend --在父元素的最前面插入节点
    8. */
    9. var app = document.getElementById("app");
    10. var p = document.createElement("p");
    11. p.innerHTML = "前面";
    12. app.prepend(p);
    13. </script>

    image.png

    7、删除一个节点

    7-1.删除指定获取子节点

  • removeChild —删除指定子节点

    1. <div id="app">
    2. <p>one</p>
    3. <p id="two">two</p>
    4. </div>
    5. <script>
    6. /*
    7. removeChild --删除指定子节点
    8. */
    9. var app = document.getElementById("app");
    10. var two = document.getElementById("two");
    11. app.removeChild(two)
    12. </script>

    image.png

    7-2.点击事件删除

    1. <div id="app">
    2. <p>one</p>
    3. <p id="two">two</p>
    4. <button id="btn">删除</button>
    5. </div>
    6. <script>
    7. var app = document.getElementById("app");
    8. var two = document.getElementById("two");
    9. var btn = document.getElementById("btn");
    10. btn.onclick = function(){
    11. app.removeChild(two);
    12. }
    13. </script>

    image.pngimage.png

    7-3.remove()指定对象删除

  • remove();

  • element.remove(); —直接指定对象执行删除

    1. <div id="app">
    2. <p>one</p>
    3. <p id="two">two</p>
    4. <button id="btn">删除</button>
    5. </div>
    6. <script>
    7. /*
    8. remove()
    9. element.remove(); --直接指定对象执行删除
    10. */
    11. var two = document.getElementById("two");
    12. var btn = document.getElementById("btn");
    13. btn.onclick = function(){
    14. two.remove();
    15. }
    16. </script>

    8、改变一个节点

    8-1.父元素改变替换子节点

  • 替换节点

parentNode.replaceChild(newNode,targetNode)

  1. <div id="app">
  2. <!-- <h1>change</h1> -->
  3. <p id="child">hello world</p>
  4. </div>
  5. <script>
  6. /*
  7. 替换节点
  8. parentNode.replaceChild(newNode,targetNode)
  9. */
  10. var app = document.getElementById("app");
  11. var h1 = document.createElement("h1");
  12. h1.innerHTML = "change"
  13. var child = document.getElementById("child");
  14. app.replaceChild(h1,child);
  15. </script>

image.png

8-2.点击改变节点

  1. <div id="app">
  2. <!-- <h1>change</h1> -->
  3. <p id="child">hello world</p>
  4. <button id="btn">改变</button>
  5. </div>
  6. <script>
  7. /*
  8. 替换节点
  9. parentNode.replaceChild(newNode,targetNode)
  10. */
  11. var app = document.getElementById("app");
  12. var h1 = document.createElement("h1");
  13. h1.innerHTML = "change"
  14. var child = document.getElementById("child");
  15. var btn = document.getElementById("btn");
  16. btn.onclick = function(){
  17. app.replaceChild(h1,child);
  18. }
  19. </script>

image.pngimage.png

9、checkbox多选框

9-1.input多选框的属性

  • input输入框有属性checked

    1. true 默认选中<br /> false 默认没有选中
    1. <input class="like" type="checkbox">足球
    2. <script>
    3. /*
    4. input输入框有属性checked
    5. true 默认选中
    6. false 默认没有选中
    7. */
    8. var input = document.getElementsByClassName("like");
    9. input[0].checked = true;
    10. </script>

    image.png

    9-2.多选,不选,反选选中测试

  • for循环设置全体选框

  • if判断设置反选

    1. <input class="like" type="checkbox">足球
    2. <input class="like" type="checkbox">篮球
    3. <input class="like" type="checkbox">排球
    4. <input class="like" type="checkbox">游泳 <br>
    5. <button id="all">全选</button>
    6. <button id="no">不选</button>
    7. <button id="reverse">反选</button>
    8. <script>
    9. /*
    10. input输入框有属性checked
    11. true 默认选中
    12. false 默认没有选中
    13. */
    14. var input = document.getElementsByClassName("like");
    15. var all = document.getElementById("all");
    16. var no = document.getElementById("no");
    17. var reverse = document.getElementById("reverse");
    18. all.onclick = function(){
    19. for(var i=0;i<input.length;i++){
    20. input[i].checked = true
    21. }
    22. }
    23. no.onclick = function(){
    24. for(var i=0;i<input.length;i++){
    25. input[i].checked = false
    26. }
    27. }
    28. reverse.onclick = function(){
    29. for(var i=0;i<input.length;i++){
    30. if(input[i].checked==true){
    31. input[i].checked=false;
    32. }
    33. else{
    34. input[i].checked=true;
    35. }
    36. }
    37. }
    38. </script>

    image.png
    全选:
    image.png
    不选:
    image.png
    反选前:
    image.png
    反选后:
    image.png

    9-3.反选的优化

    1.if-else 判断取反
    2.三元运算式 判断取反
    3.取反运算符

    1. <input class="like" type="checkbox">足球
    2. <input class="like" type="checkbox">篮球
    3. <input class="like" type="checkbox">排球
    4. <input class="like" type="checkbox">游泳 <br>
    5. <button id="reverse">反选</button>
    6. <script>
    7. /*
    8. input输入框有属性checked
    9. true 默认选中
    10. false 默认没有选中
    11. 1.if-else 判断取反
    12. 2.三元运算式 判断取反
    13. 3.取反运算符
    14. */
    15. var input = document.getElementsByClassName("like");
    16. var reverse = document.getElementById("reverse");
    17. reverse.onclick = function(){
    18. for(var i=0;i<input.length;i++){
    19. // input[i].checked = (input[i].checked==true)? false:true
    20. input[i].checked = !input[i].checked
    21. }
    22. }
    23. </script>

    image.pngimage.png

    10、奇偶数项的选择

  • odd: 奇数项

  • even:偶数项

    10-1.CSS方法

    1. <style>
    2. /*
    3. odd:奇数项
    4. even:偶数项
    5. */
    6. li:nth-child(odd){
    7. color: red;
    8. }
    9. li:nth-child(even){
    10. color: orange;
    11. }
    12. </style>
    13. </head>
    14. <body>
    15. <ul>
    16. <li>0</li>
    17. <li>1</li>
    18. <li>2</li>
    19. <li>3</li>
    20. <li>4</li>
    21. <li>5</li>
    22. <li>6</li>
    23. <li>7</li>
    24. </ul>
    image.png

    10-2.JavaScript方法

    加入点击事件改变奇偶项各自样式:
    1. <ul>
    2. <li>0</li>
    3. <li>1</li>
    4. <li>2</li>
    5. <li>3</li>
    6. <li>4</li>
    7. <li>5</li>
    8. <li>6</li>
    9. <li>7</li>
    10. <button id="one">所有偶数的颜色变red</button>
    11. <button id="two">所有奇数的颜色变orange</button>
    12. </ul>
    13. <script>
    14. var lis = document.getElementsByTagName("li");
    15. var one = document.getElementById("one");
    16. var two = document.getElementById("two");
    17. one.onclick = function(){
    18. for(var i=0;i<lis.length;i++){
    19. if(i%2==0){
    20. lis[i].style.color = "red";
    21. }
    22. }
    23. }
    24. two.onclick = function(){
    25. for(var i=0;i<lis.length;i++){
    26. if(i%2!=0){
    27. lis[i].style.color = "orange";
    28. }
    29. }
    30. }
    31. </script>
    image.png
    image.pngimage.png