1. 实例演示如何正确优雅的获取表单元素 2. 实例演示dom树的遍历与常用属性 3. 实例演示dom元素的增删改操作 4. js操作元素内容的几个常用方法,并分析异同 5. 将留言板的实战案例进行仿写,加上一些样式 6. 实例演示 dataset对象 7. 实例演示如何获取元素的计算样式 8. 实例演示 classList 对象常用方法 9. 实例演示事件的添加与派发

一、优雅的获取表单元素

  • 获取表单 - 通过form表单的ID获取
    1. // 通过form表单的id获取整个表单
    2. // document.forms可获取页面所有表单,加上索引[0]或.id可获取指定的表单
    3. console.log(document.forms[0]);
    4. console.log(document.forms.frm);
    5. // 获取表单内的元素,可通过元素的name值来获取:forms.表单id.元素name
    6. console.log(document.forms.frm.username);
    7. // 获取元素的值:forms.表单id.元素name.value,获取其他属性值也一样,如:username.name;username.type
    8. console.log(document.forms.frm.username.value);

二、dom树的遍历与常用属性

  1. // dom树的遍历与常用属性
  2. // 1.获取整个list元素
  3. let div=document.querySelector('.list');
  4. console.log(div);
  5. // 2.获取所有子节点元素:children,获取到的结果是一个元素集合。
  6. let child=div.children;
  7. console.log(child);
  8. // 3.将元素集合转成数组 Array.from(集合) 或者 ...集合
  9. const arr=Array.from(child);
  10. console.log(arr);
  11. const arr2=[...child];
  12. console.log(arr2);
  13. // 常用属性
  14. // 1.元素集合.firstElementChild可获取集合中的第一个元素。
  15. console.log(child);
  16. div.firstElementChild.style.backgroundColor='#f60';
  17. // 2.获取最后一个
  18. div.lastElementChild.style.backgroundColor='yellow';
  19. // 获取下一个兄弟元素
  20. div.firstElementChild.nextElementSibling.style.backgroundColor='green';
  21. // 获取上一个兄弟元素
  22. div.lastElementChild.previousElementSibling.style.backgroundColor='red';
  23. // 获取父节点 parentElement或parentNode
  24. div.lastElementChild.parentElement.style.border='5px solid #ccc';

三、dom元素的增删改操作

  1. // 创建元素 document.createElement
  2. ul=document.createElement('ul');
  3. document.body.append (ul);
  4. // 创建子元素li
  5. for(let i=0;i<5;i++){
  6. let li=document.createElement('li');
  7. li.textContent='item'+(i+1);
  8. ul.append(li);
  9. }
  10. // 查看元素
  11. // 1.outerHtml获取元素的html字符串
  12. console.log(ul.outerHTML);
  13. // 在节点之前插入元素before()
  14. let newLi=document.createElement('li');
  15. newLi.textContent='New-Item';
  16. newLi.style.color='#f60';
  17. // 例:在第4个元素前面插入新建的元素
  18. // 1.先获取第4个元素
  19. let four=document.querySelector('li:nth-of-type(4)');
  20. // 2.插入
  21. four.before(newLi);
  22. // 在节点之后插入after()
  23. // 插入节点时必需新建或克隆节点,不能用之前创建的,否则就只是把之前创建的元素剪切移动到此处,之前插入的位置变为空了。
  24. // 例:在第4个节点之后插入新节点
  25. // 1.先创建或克隆新元素:克隆方法:元素.cloneNode(true),参数true如果不写只克隆节点不克隆文本。
  26. let fourAfter=newLi.cloneNode(true);
  27. // 2.插入
  28. four.after(fourAfter);
  29. // 在父节点插入元素insertAdjacentElement('插入位置',元素):有4个位置,节点开始位置之前beforeBegin、开始位置之后afterBegin、节点结束位置之前beforeEnd、结束位置之后afterEnd
  30. // 例:在UL前面插入一个h3
  31. // 1.先创建h3元素
  32. let H3=document.createElement('h3');
  33. H3.textContent='好好学习,天天向上!';
  34. console.log(H3);
  35. ul.insertAdjacentElement('beforeBegin',H3);
  36. // 替换元素replaceChild
  37. // 1.创建一个新元素
  38. let a=document.createElement('a');
  39. a.href='https://baidu.com';
  40. a.textContent='百度';
  41. // 2.执行替换最后一个元素
  42. let last=ul.lastElementChild;
  43. ul.replaceChild(a,last);
  44. // 删除元素remove(节点)
  45. ul.lastElementChild.remove(last);

四、js操作元素内容的几个常用方法及异同

在家写的,保存草稿了,但到公司发现消失了……。回家修改博客补上

五、留言板

在家写的,保存草稿了,但到公司发现消失了……。回家修改博客补上

六、dataset对象

内置属性:title/style/id/class等

自定义属性:以data- 开头

  1. <ul>
  2. <!-- data-开头的为自定义属性,用dataset.加上data-后面的自定义内容即可 -->
  3. <li class="item" data-types="电脑">item1</li>
  4. <li class="item" data-types="手机">item2</li>
  5. <li class="item" data-types="平板">item3</li>
  6. <li class="item" data-types="MP3">item4</li>
  7. <li class="item" data-types="电视">item5</li>
  8. </ul>
  9. <div data-me-name='松涛'>Hello World!</div>
  1. <script>
  2. let li=document.querySelectorAll('li');
  3. for(let i=0;i<li.length;i++){
  4. // 获取方式1:去掉data-,直接通过元素.dataset.属性。例如:li设置的自定义属性为data-type='pc',则获取时通过li.dataset.type
  5. li[i].onclick=()=>console.log(li[i].dataset.types);
  6. }
  7. // 获取方式2:如果定义成这种形式:data-me-name,也是先去掉data-,然后将me-name转为小驼峰写法:meName
  8. let div=document.querySelector('div');
  9. console.log(div.dataset.meName);
  10. // dataset是可读写属性,即可改变元素的自定义属性值
  11. div.dataset.meName='小明';
  12. </script>

七、获取元素的计算样式

  1. <style>
  2. .box{ width: 10em;height: 10em;}
  3. </style>
  4. <body>
  5. <div class="box" style="color: rgb(22, 22, 21);background-color: lightblue;">Hello World!</div>
  6. </body>
  1. // 获取元素样式分两种情况:1.元素行内样式,即定义在元素标签内的。如:<div style='color:red'>Hello</div>
  2. // 2.文档内定义在<style></style>标签中的样式以及外部引入的CSS样式,这些都属性计算样式。
  3. // 获取第1种情况的方法:利用元素的style属性获取 **行内样式** 的值
  4. // 此方式只能获取元素行内样式定义的属性值,不能获取<style></style>标签中定义的以及外部引入的CSS样式。
  5. let div=document.querySelector('div');
  6. console.log(div.style.color);
  7. console.log(div.style.backgroundColor);
  8. // 获取第2种情况的方法:需要通过window对象的计算样式属性来获取:window.getComputedStyle(元素).属性
  9. // 此方式获取到的宽高度等有数值的属性是带单位的,如高度值表现为200px,如果只想要数值不想要单位,可以通过parseInt转换一下。
  10. let width=window.getComputedStyle(div).width;
  11. console.log(width); // 打印 160px
  12. console.log(parseInt(width)); // 打印 160

八、classList 对象常用方法

  1. <style>
  2. .blue { color: blue;}
  3. .red { color: red;}
  4. .green { color: green;}
  5. </style>
  6. <body>
  7. <!-- 操作元素的class属性 -->
  8. <p></p>
  9. <script>
  10. // 通过元素的classList对象来操作class
  11. let p=document.querySelector("p");
  12. console.log(typeof p.classList); // 打印object
  13. // 1.add添加样式,可以叠加
  14. p.classList.add('blue');
  15. p.classList.add('red');
  16. // 2.contains 判断某个样式是否存在,返回值:true/false
  17. console.log(p.classList.contains('blue')); // 返回true
  18. // 3.replace(旧样式,新样式)替换样式
  19. p.classList.replace('red','green'); // 返回值为true/false 即替换成功与否,重复替换返回false
  20. // 4.remove(样式)删除样式
  21. p.classList.remove('green'); //无返回值(undefined)
  22. // 5.toggle切换样式
  23. p.classList.toggle('red');
  24. </script>
  25. </body>

九、事件的添加与派发

  1. <body>
  2. <button>按钮一</button>
  3. <button>按钮二</button>
  4. <button>按钮三</button>
  5. <script>
  6. // 事件的添加方式一:先获取元素,然后通过元素.onclick(){}进行添加
  7. let btn1=document.querySelector('button');
  8. btn1.onclick=()=>console.log(btn1.textContent);
  9. // 删除事件:null
  10. btn1.onclick=null;
  11. // 方式二:事件监听器 addEventListener('事件click等',函数名)
  12. // 第二个参数:函数,可以直接写回调,但不能移除;想要移除,必需得是命名函数且在外部声明
  13. // 注:函数名不用加(),也不用加'',否则报错。
  14. let btn2=document.querySelector('button:nth-of-type(2)');
  15. btn2.addEventListener('click',getName);
  16. function getName(){
  17. console.log(1234);
  18. }
  19. // 移除事件
  20. btn2.removeEventListener('click',getName); // 参数与添加一致
  21. // 事件派发:让事件自动执行点击等事件操作,无需干预。
  22. // 以按钮自动执行点击操作为例
  23. let btn3=document.querySelector('button:nth-of-type(3)');
  24. // 1.给按钮添加点击事件
  25. let money=0;
  26. btn3.addEventListener('click',()=>{
  27. console.log(money);
  28. money+=1.2;
  29. })
  30. // 2.创建一个自定义事件:用new Event构造函数生成自定义事件,对标按钮的点击事件click
  31. // console.log(typeof new Event('click')); // 返回一个对象类型 object
  32. let getMoney=new Event('click');
  33. // 3.实施事件派发 dispatchEvent(自定义事件名)
  34. btn3.dispatchEvent(getMoney);
  35. // 4.通过setTimeout可以延时执行;通过setInterval可以定时执行
  36. setTimeout(()=>btn3.dispatchEvent(getMoney),1000); //延时派发
  37. setInterval(()=>btn3.dispatchEvent(getMoney),1000); //定时派发
  38. </script>
  39. </body>

更多相关文章

  1. Android(安卓)GPS获取当前经纬度坐标
  2. android获取系统标准时区的时间
  3. 系出名门Android(2) - 布局(Layout)和菜单(Menu)
  4. Android的Root原理
  5. Android应用开发提高系列(5)――Android动态加载(下)――加载已安装A
  6. Android7.0文件读写(获取拍照结果)笔记
  7. Android利用DownloadManager实现文件下载
  8. Android生命周期中几个重要的函数
  9. Android实现EditView获取焦点但不弹出软键盘

随机推荐

  1. LinearLayout 让最后一个空间靠到屏幕底
  2. Android使用系统分享文件给微信,QQ指定的
  3. 一些Andriod相关的网站
  4. Android子线程与子线程的通信
  5. Android基本之UI Layout
  6. Android实现电话状态监控
  7. android 播放视频保存的一些网页
  8. android多选联系人实现
  9. 有关Material Design新特性的详解。
  10. Power Profiles for Android