• 【第五部分 | JS WebAPI】2:DOM 元素操作


    目录

    1-1 改变元素内容(去除html和空格换行)

    1-2 改变元素内容(保留html和空格换行 用的最多)

    1-3 获取元素的内容

    [ 更多其它可操作的元素属性 ]

    2-1 修改元素的属性

    2-2 修改表单元素属性

    2-3 使用this指向函数调用者

    3-1 通过 element.style 样式属性操作

    3-2 通过 element.className 进行样式属性批量修改

    4-1 获取用户输入的值 inputElement.value

    4-2 案例:判断用户输入的密码是否符合要求

    5-1 获取自定义属性

    6-2 设置自定义属性的值

    6-3 移除自定义属性

    [ 总结 ]


    事件:进行对元素某些操作的响应

    操作元素:DOM 操作可以改变网页内容、结构和样式,我们可以利用 DOM 操作元素来改变元素里面的内 容 、属性等。注意以下都是属性

    1-1 改变元素内容(去除html和空格换行)

    从起始位置到终止位置的内容, 但它去除 html 标签, 同时空格和换行也会去

    element.innerText = 'XXXXXX';
    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Documenttitle>
    8. head>
    9. <body>
    10. <div id="id">猜猜我是谁div>
    11. <button id="btn">Guessbutton>
    12. <script>
    13. //获取元素
    14. var id = document.getElementById('id');
    15. var btn = document.getElementById('btn');
    16. //绑定事件、函数
    17. btn.onclick = function(){
    18. id.innerText = '我是Klee';
    19. }
    20. script>
    21. body>
    22. html>
     

    1-2 改变元素内容(保留html和空格换行 用的最多)

    • innerText不识别html标签,会保留下来显示,而且不会换行和空格

    • innerText是IE自己发起的,火狐不支持;innerHTML是W3C推荐的,用的最多。

    element.innerHTML = 'XXXXX';

    1-3 获取元素的内容

    • element.innerText 和 element.innerHTML 除了能修改元素内容,还能读取元素内容。

    • 区别的方式在于: XXXX = element.innerXXX 则代表获取 ; element.innerXXX = XXX 则代表修改


    [ 更多其它可操作的元素属性 ]

    基本用法:

    获取元素 → 绑定事件 → 声明函数 → 元素.属性 = 要修改的值

    2-1 修改元素的属性

    如 img src="XXXX",我们通过元素的操作,其实还可以修改诸如src这样的路径

    1. <img src="imgs/p1.jpg" id="img" style="width: 400px;height: 600px;">
    2. <button id="changeP">换图片button>
    3. <script>
    4. //获取元素
    5. var img = document.getElementById('img');
    6. var change = document.getElementById('changeP');
    7. //绑定事件、函数
    8. change.onclick = function(){
    9. //修改img的src属性,更换图片
    10. img.src = 'imgs/p2.jpg';
    11. }
    12. script>

     


    2-2 修改表单元素属性

    案例:点击小眼睛把密码改为明文显示

    1. <input type="password" placeholder="input pwd" name="pass" id="pass">
    2. <button id="eye">eyebutton>
    3. <script>
    4. //获取元素
    5. var pass = document.getElementById('pass');
    6. var eye = document.getElementById('eye');
    7. //绑定事件、函数
    8. eye.onclick = function(){
    9. pass.type = 'text';
    10. }
    11. script>

     案例2:按钮点击之后,不给再点击

     


    2-3 使用this指向函数调用者

    • 上述案例“按钮点击之后,不给再点击” 的 btn.disabled = true; 可以改写为 this.disabled = true; 效果一样

    • this指向的是函数调用者。


    3-1 通过 element.style 样式属性操作

    我们可以通过 JS 修改元素的大小、颜色、位置等样式

     

    element.style 的语法只能一次修改一个属性。 如果需要批量修改属性,建议使用className语法,后面会学习

     

    代码示例

    1. <div class="b" style="width: 100px;height: 100px; background-color: pink;">div>
    2. <button id="changeStyle">换皮肤button>
    3. <script>
    4. //获取元素
    5. var b = document.getElementsByClassName('b'); //这个获取的是一个元素对象集合!需要 b[0] 取出元素对象
    6. var block = b[0];
    7. var changeStyle = document.getElementById('changeStyle');
    8. //绑定事件和函数
    9. changeStyle.onclick = function(){
    10. block.style.backgroundColor = 'blue';//JS的属性名字是驼峰命名法
    11. }
    12. script>

     案例:淘宝二维码点叉隐藏(思路:点击按钮,则隐藏元素)

     案例:循环精灵图

    案例:新浪下拉菜单

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Documenttitle>
    8. <style>
    9. * {
    10. margin: 0;
    11. padding: 0;
    12. }
    13. li {
    14. list-style: none;
    15. }
    16. .nav {
    17. position: relative;
    18. width: 100%;
    19. height: 60px;
    20. background-color: lightblue;
    21. }
    22. .nav .box1 {
    23. width: 100px;
    24. height: 100%;
    25. color: black;
    26. font-size: 20px;
    27. font-weight: 600;
    28. text-align: center;
    29. line-height: 60px;
    30. }
    31. .nav .box1:hover {
    32. background-color: lightslategray;
    33. }
    34. .nav .box1content {
    35. position: absolute;
    36. left: 0;
    37. top: 60px;
    38. width: 100px;
    39. height: 100px;
    40. background-color: pink;
    41. visibility: hidden;
    42. }
    43. style>
    44. head>
    45. <body>
    46. <div class="nav">
    47. <div class="box1">下拉菜单div>
    48. <div class="box1content">
    49. <li>1li>
    50. <li>2li>
    51. <li>3li>
    52. div>
    53. div>
    54. <script>
    55. var box1 = document.querySelector('.nav .box1');
    56. var content1 = document.querySelector('.nav .box1content');
    57. box1.onmouseover = function(){
    58. content1.style.visibility = 'visible';
    59. }
    60. box1.onmouseout = function(){
    61. content1.style.visibility = 'hidden';
    62. }
    63. content1.onmouseover = function(){
    64. content1.style.visibility = 'visible';
    65. }
    66. content1.onmouseout = function(){
    67. content1.style.visibility = 'hidden';
    68. }
    69. script>
    70. body>
    71. html>

     


    3-2 通过 element.className 进行样式属性批量修改

    基本语法

    1. <style>
    2. .classname {
    3. //属性
    4. }
    5. style>
    6. <script>
    7. var element = document.getXXXX;
    8. element.className = 'classname';
    9. script>


    注意事项

    • 如果样式修改较多,可以采取操作类名方式更改元素样式。

    • 通过element.className赋值的新css类名样式,会覆盖掉原先元素所使用的CSS样式类名

    • 如果想保留原先的CSS样式类名,可以写成 element.className = '原先的类名 新样式类名';

    代码示例

    1. html>
    2. <html lang="en
    3. UTF-8">
    4. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <title>Documenttitle>
    7. <style>
    8. .box {
    9. width: 200px;
    10. height: 200px;
    11. margin: 100px auto;
    12. background-color: pink;
    13. }
    14. .boxchange {
    15. width: 300px;
    16. height: 300px;
    17. margin: 90px auto;
    18. background-color: greenyellow;
    19. }
    20. style>
    21. head>
    22. <body>
    23. <div class="box">div>
    24. <button id="btn">Clickbutton>
    25. <script>
    26. var box = document.getElementsByClassName('box');
    27. var boxObj = box[0];//通过className获取的是元素对象集合,需要通过下标取出元素对象
    28. var btn = document.getElementById('btn');
    29. btn.onclick = function(){
    30. boxObj.className = 'boxchange';//注意,这里的CSS类名不需要加 “ . ”
    31. }
    32. script>
    33. body>
    34. html>

    4-1 获取用户输入的值 inputElement.value

    1. //input表单元素的元素对象是i的话,则获取用户输入的内容的语法是
    2. var XXX = i.value;

    案例:密码框格式提示错误信息

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Documenttitle>
    8. <style>
    9. /* CSS样式 */
    10. * {
    11. margin: 0;
    12. padding: 0;
    13. }
    14. .box {
    15. width: 700px;
    16. height: 100px;
    17. margin: 200px auto;
    18. background-color: antiquewhite;
    19. }
    20. .box .put {
    21. width: 100%;
    22. height: 50px;
    23. }
    24. .box .put input {
    25. display: block;
    26. float: left;
    27. margin: 10px;
    28. width: 300px;
    29. height: 20px;
    30. }
    31. .box .put .tips {
    32. float: left;
    33. margin: 12px;
    34. height: 20px;
    35. width: 300px;
    36. border: red;
    37. line-height: 20px;
    38. color: red;
    39. font-weight: 600;
    40. font-family: 'Microsoft YaHei';
    41. visibility: hidden;
    42. }
    43. .box button {
    44. margin: 10px;
    45. display: block;
    46. float: left;
    47. }
    48. style>
    49. head>
    50. <body>
    51. <div class="box">
    52. <div class="put">
    53. <input type="password" placeholder="设置密码" name="pwd" value="">
    54. <div class="tips">X 格式不符合要求!需要6位,且含大小写div>
    55. div>
    56. <button>设置button>
    57. div>
    58. <script>
    59. var btn = document.querySelector('.box button');
    60. var pwd = document.querySelector('.box .put input');
    61. var tip = document.querySelector('.box .put .tips');
    62. btn.onclick = function(){
    63. var pwdStr = pwd.value;//通过input的value获取用户输入
    64. console.log(pwdStr);
    65. if(pwdStr.length < 6) {
    66. tip.style.visibility = 'visible';
    67. }
    68. else {
    69. tip.style.visibility = 'hidden';
    70. alert('注册成功');
    71. }
    72. }
    73. script>
    74. body>
    75. html>

     

    路二:光标离开,则触发事件。 input.onblur


    4-2 案例:判断用户输入的密码是否符合要求

    JS中的字符不能直接当ASCII码使用!需要进行转换

    char → ASCII

    1. let x = 'a';
    2. x.charCodeAt(); //会输出'a'的ASCII码,即97

    ASCII → char

    String.fromCharCode(97); //会输出ASCII码为97的字符,即'a'

    示例代码:用户输入的密码 小于6位,并且不含大写和小写 则提示不合格

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Documenttitle>
    8. <style>
    9. /* CSS样式 */
    10. * {
    11. margin: 0;
    12. padding: 0;
    13. }
    14. .box {
    15. width: 700px;
    16. height: 100px;
    17. margin: 200px auto;
    18. background-color: antiquewhite;
    19. }
    20. .box .put {
    21. width: 100%;
    22. height: 50px;
    23. }
    24. .box .put input {
    25. display: block;
    26. float: left;
    27. margin: 10px;
    28. width: 300px;
    29. height: 20px;
    30. }
    31. .box .put .tips {
    32. float: left;
    33. margin: 12px;
    34. height: 20px;
    35. width: 300px;
    36. border: red;
    37. line-height: 20px;
    38. color: red;
    39. font-weight: 600;
    40. font-family: 'Microsoft YaHei';
    41. visibility: hidden;
    42. }
    43. .box button {
    44. margin: 10px;
    45. display: block;
    46. float: left;
    47. }
    48. style>
    49. head>
    50. <body>
    51. <div class="box">
    52. <div class="put">
    53. <input type="password" placeholder="设置密码" name="pwd" value="">
    54. <div class="tips">X 格式不符合要求!需要6位及以上,且含大小写div>
    55. div>
    56. <button>设置button>
    57. div>
    58. <script>
    59. var btn = document.querySelector('.box button');
    60. var pwd = document.querySelector('.box .put input');
    61. var tip = document.querySelector('.box .put .tips');
    62. btn.onclick = function(){
    63. var pwdStr = pwd.value;//通过input的value获取用户输入
    64. console.log(pwdStr);
    65. if(pwdStr.length < 6 || !haveBigOrSmall(pwdStr)) {
    66. tip.style.visibility = 'visible';
    67. }
    68. else {
    69. tip.style.visibility = 'hidden';
    70. alert('注册成功');
    71. }
    72. }
    73. function haveBigOrSmall(str){
    74. var len = str.length;
    75. var small = false;
    76. var big = false;
    77. for(var i=0 ; i
    78. if(big && small){
    79. return true;
    80. }
    81. if( str.charCodeAt(i) >= 65 && str.charCodeAt(i) <= 90 && big!=true ){
    82. big = true;
    83. }
    84. if( str.charCodeAt(i) >= 97 && str.charCodeAt(i) <= 122 && small!=true ){
    85. small = true;
    86. }
    87. }
    88. return false;
    89. }
    90. script>
    91. body>
    92. html>

    5-1 获取自定义属性

    什么是自定义属性?

    • 写在标签内的非内置属性,则被视为自定义属性

    • 自定义属性目的:是为了保存并使用数据。有些数据可以保存到页面中而不用保存到数据库中。

    • 如下列的index。它不属于Html内置的属性,但是也不会编译报错(毕竟Html是文本语言嘛),而是会把index看作一个程序员自定义的属性

     

    <div index="1">div>

    自定义属性如何获取?

    元素对象.getAttribute('属性名字');
    • 需要注意的是:自定义属性的获取语法,也可以作用于 内置元素属性(如style、src、title等)

    区别


    6-2 设置自定义属性的值

    值得注意的是:若标签名中没有对应的自定义属性,则在使用setAttribute的时候会自动添加这个属性

     

    代码示例  

    1. <div index="2">div>
    2. <script>
    3. var div = document.getElementByTagName('div'); //获取dom元素对象
    4. div.setAttribute('index','2'); //设置对象中的自定义属性的值为2
    5. script>

    6-3 移除自定义属性

    element.removeAttribute('属性');

    [ 总结 ]

  • 相关阅读:
    LeetCode 每日一题 2023/9/11-2023/9/17
    Flink运行时架构 完整使用 (第四章)
    解决 webpack 配置 sass-loader后报错,无法正常build
    ElasticSearch(超详细解说)[springBoot整合ES并简单实现增删改查]
    机器学习概述
    HanLP — 感知机(Perceptron) -- Python
    Qt进程间通信(QSharedMemory、QLocalSocket、QWebSocket、QProcess、D-BUS、QTcpSocket)
    SpringBoot整合Redis - @Cacheable 和 RedisTemplate
    双通道内存和单通道的区别是什么
    Ray+GPU支持高性能计算
  • 原文地址:https://blog.csdn.net/m0_57265007/article/details/127981215