当前位置:   article > 正文

前端学习day14-DOM:模板字符串,占位符,根据数据源展示数据,元素隐藏与显示,图片切换,全局变量要等循环结束才能确定其值_``模板字符串显示${}

``模板字符串显示${}

目录

1.``模板字符串   ${}占位符  

2.展示数据作业:根据数据源展示数据

3.元素的显示隐藏

5.切换图片

6.关于变量的问题


1.``模板字符串   ${}占位符  

        模板字符串 可以换行 任意的嵌套的

  1. str += `
  2. <div class='box'>
  3. <img src="${obj.imgsrc}">
  4. <p>${obj.title}</p>
  5. </div>
  6. `
 // 对于单引号 和双引号 都不可以换行 只能通过 + 进行拼接
        // var str  = "helloe " + "world";

        // \ 转义符 把后边特殊符号做为一个普通字符串  或者 转义成换行 制表符健
        // \n 换行  \t  4个空格 tab
        var str = "我要送你个\"惊喜\"";
        console.log(str);
        // 第一个\ 把第二个\转义成字符串
        var path = "c:\\user\\desktop";

 

2.展示数据作业:根据数据源展示数据

2.1直接利用innerHTML添加

  1. str = "";
  2. for (var obj of arr) {
  3. str += `
  4. <div>
  5. <img src=${obj.imgsrc}>
  6. <p>${obj.title}</p>
  7. </div>`
  8. document.querySelector("main").innerHTML = str;
  9. }

2.2 利用数组的join拼接实现

  1. str = "";
  2. var array = [];
  3. for (var i = 0; i < datas.length; i++) {
  4. var obj = datas[i];
  5. var str = `
  6. <div class='box'>
  7. <img src="${obj.imgsrc}">
  8. <p>${obj.title}</p>
  9. </div>
  10. `
  11. array.push(str);
  12. }
  13. document.querySelector("main").innerHTML = array.join("");

2.3创建div然后利用appendChild追加div

  1. for(var i =0; i< datas.length;i++){
  2. var obj = datas[i];
  3. var div = document.createElement("div");
  4. div.classList.add("box");
  5. div.innerHTML = `
  6. <img src="${obj.imgsrc}">
  7. <p>${obj.title}</p>
  8. `
  9. document.querySelector("main").appendChild(div);
  10. }

3.元素的显示隐藏

  1. <style>
  2. html,body{
  3. height: 100%;
  4. margin: 0;
  5. }
  6. .login {
  7. float: right;
  8. margin-right: 100px;
  9. width: 100px;
  10. line-height: 50px;
  11. text-align: center;
  12. border-radius: 20px;
  13. background: blue;
  14. color: white;
  15. }
  16. .mask {
  17. display: none;
  18. position: fixed;
  19. width: 100%;
  20. height: 100%;
  21. background: rgba(110, 110, 97, 0.5);
  22. }
  23. .box{
  24. width: 200px;
  25. height: 100px;
  26. background: white;
  27. position: absolute;
  28. top: 50%;
  29. left: 50%;
  30. transform: translate(-50%,-50%);
  31. }
  32. .box>span{
  33. float: right;
  34. margin-right: 20px;
  35. }
  36. </style>
  37. </head>
  38. <body>
  39. <div class="login">登录</div>
  40. <div class="mask">
  41. <div class="box">
  42. <span> X </span>
  43. </div>
  44. </div>
  45. <script>
  46. var btn = document.querySelector(".login");
  47. var mask = document.querySelector(".mask");
  48. var span = document.querySelector("span");
  49. btn.onclick = function () {
  50. mask.style.display = "block";
  51. }
  52. span.onclick = function () {
  53. mask.style.display = "none";
  54. }
  55. </script>
  56. </body>

4.补充内容

document.writeln,

  1. <div myname="test" class="name red">aaaaaa</div>
  2. <!-- 绑定事件的另外一种写法 "方法名()" 一定要记得加() -->
  3. <button onclick="btnclick()">点我</button>
  4. <script>
  5. // 移除 自定义属性
  6. var div = document.querySelector("div");
  7. div.removeAttribute("myname");
  8. // 查看元素是否拥有 某个自定义属性
  9. // true or false
  10. div.hasAttribute("myname");
  11. // 检查class列表中是否拥有某个值
  12. // true or false
  13. var contain = div.classList.contains("red");
  14. console.log(contain)
  15. function btnclick() {
  16. // 一般不用
  17. // 会覆盖页面中的内容
  18. // 不会换行
  19. // document.write("111111 <br> 2222");
  20. document.write("111111");
  21. document.write("222222");
  22. // writeln 可以实现换行
  23. // 配合 pre标签进行使用带有换行
  24. document.writeln("<pre>");
  25. document.writeln("111111");
  26. document.writeln("222222");
  27. document.writeln("</pre>");
  28. }
  29. </script>

5.切换图片

  1. <div class="big">
  2. <img src="./imgs/1.jpg" alt="">
  3. </div>
  4. <div class="small">
  5. <img src="./imgs/1.jpg" alt="" class="active">
  6. <img src="./imgs/2.jpg" alt="">
  7. <img src="./imgs/3.jpg" alt="">
  8. <img src="./imgs/4.jpg" alt="">
  9. <img src="./imgs/5.jpg" alt="">
  10. </div>
  11. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
  12. <script>
  13. // ctrl +shift + p
  14. // 配置vscode 偏好设置的
  15. // 设置一下代码片段
  16. var imgs = document.querySelectorAll(".small img");
  17. var bigImg = document.querySelector('.big img');
  18. // 1.
  19. // for(let i =0;i < imgs.length;i++){
  20. // var smallImg = imgs[i];
  21. // smallImg.onclick = function () {
  22. // // 把点击的小图 src 赋值 大图
  23. // bigImg.src = this.src;
  24. // // 先把之前拥有class为active的全部 移除掉
  25. // for(var j = 0;j < imgs.length;j++){
  26. // imgs[j].classList.remove("active");
  27. // }
  28. // // 把点击的元素添加类名
  29. // this.classList.add("active");
  30. // }
  31. // }
  32. // 2
  33. // for (let i = 0; i < imgs.length; i++) {
  34. // var smallImg = imgs[i];
  35. // // 找一个中间变量 来记录当前高亮的
  36. // var previous = imgs[0];// 第一个高亮 指定第一个img对象
  37. // smallImg.onclick = function () {
  38. // // 当高亮和点击的是同一个元素时 不执行
  39. // if(previous == this)
  40. // return;
  41. // // 把点击的小图 src 赋值 大图
  42. // bigImg.src = this.src;
  43. // // 把点击的元素添加类名
  44. // this.classList.add("active");
  45. // // 把之前高亮的移除
  46. // previous.classList.remove("active");
  47. // // 改变高亮元素 为当前点击的元素
  48. // previous= this;
  49. // }
  50. // }
  51. // 3.
  52. for (let i = 0; i < imgs.length; i++) {
  53. var smallImg = imgs[i];
  54. // 找一个中间变量 来记录当前高亮的
  55. var previous = imgs[0];// 第一个高亮 指定第一个img对象
  56. smallImg.onclick = function () {
  57. // 当高亮和点击的是同一个元素时 不执行
  58. if(previous == this)
  59. return;
  60. // 把点击的小图 src 赋值 大图
  61. bigImg.src = this.src;
  62. // 把点击的元素添加类名
  63. imgs[i].classList.add("active");
  64. // 把之前高亮的移除
  65. previous.classList.remove("active");
  66. // 改变高亮元素 为当前点击的元素
  67. previous= this;
  68. }
  69. }

6.关于变量的问题

       全局变量要等循环结束才能确定其值

  1. // Uncaught TypeError: Cannot read properties of undefined (reading 'innerText')
  2. var lis = document.querySelectorAll("li");
  3. for(var i = 0;i < lis.length;i++){
  4. var li = lis[i];
  5. li.onclick = function () {
  6. // console.log(lis[i].innerText);// 此处会报错 因为i是全局变量 要等到循环结束才能确定其值
  7. console.log("i ===== ",i);// == 4
  8. }
  9. }
  10. // 怎么解决呢
  11. // 把var 换成 let
  12. // (立即执行函数和闭包来解决)
  1. <div>
  2. <input type="text"> <button> + </button>
  3. <div class="box"></div>
  4. </div>
  5. <script>
  6. // innerHTML
  7. // create append
  8. var btn = document.querySelector("button");
  9. // var div = document.querySelector("div");
  10. // btn.onclick = function () {
  11. // // 往父元素中添加子元素 通过innerHTML的方式 会导致父元素的所有绑定的事件被注销
  12. // div.innerHTML += "<input type='text'> <button> -- </button>"
  13. // }
  14. var div = document.querySelector(".box");
  15. var num = 0;
  16. // 1.
  17. // btn.onclick = function () {
  18. // if (num < 5) {
  19. // div.innerHTML += "<input type='text'> <button> -- </button> <br/>"
  20. // }
  21. // else{
  22. // // alert("num的值是:",num);
  23. // console.log("num == ",num);
  24. // }
  25. // num++;
  26. // }
  27. // 2.
  28. btn.onclick = function() {
  29. var section = document.createElement("section");
  30. // var input = document.createElement("input");
  31. // var button = document.createElement("button");
  32. // button.innerText = " - ";
  33. // section.appendChild(input);
  34. // section.appendChild(button);
  35. section.innerHTML += "<input type='text'> <button class='del'> -- </button> <br/>"
  36. div.appendChild(section);
  37. }
  38. var delbtns = document.querySelectorAll(".del");
  39. console.log(delbtns.length);
  40. // 注意代码执行的顺序
  41. // 此时删除按钮点击无效
  42. //
  43. for (const btn of delbtns) {
  44. btn.onclick = function () {
  45. console.log(" ====== ");
  46. }
  47. }
  48. </script>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/93091
推荐阅读
相关标签
  

闽ICP备14008679号