前端案例:简易计算器的实现(dom操作、target、eval函数、try catch、switch-case)

举报
敬 之 发表于 2022/04/16 01:59:10 2022/04/16
【摘要】 目录 一、案例效果 二、涉及要点 三、完整代码+详细注释 一、案例效果 二、涉及要点 1. 文本域标签 <textarea></textarea> 的 readonly 属性用于设置文本域文字为只读; 2. DOM 获取元素,getElementById() 获取带有指定 id 的节...

目录

一、案例效果

二、涉及要点

三、完整代码+详细注释


一、案例效果

二、涉及要点

1. 文本域标签 <textarea></textarea> 的 readonly 属性用于设置文本域文字为只读;

2. DOM 获取元素,getElementById() 获取带有指定 id 的节点;

3. DOM 事件中的 target 是指获取事件的目标,即触发事件的真实元素。如下代码中:


   
  1. btn.onclick = function (e) {
  2. //判断只有点击到按钮上才会将信息录入“显示屏”
  3. if (e.target.nodeName === "BUTTON") {

        e.target.nodeName,e是指触发事件,名称自己定义;target.nodeName 是获取触发事件元素的标签名,我们这里获取按钮 button,意为只有触发事件的元素为按钮时才执行下面逻辑。除此之外还有:

e.target.id

获取事件触发元素的 id
e.target.className 获取事件触发元素的类名
event.target.innerHTML 获取事件触发元素的内容

4. eval 函数

        eval() 函数用于计算 JavaScript 字符串,并把它作为脚本代码来执行。如果参数是一个表达式,eval() 函数将执行表达式。如果参数是 Javascript 语句,eval() 将执行 Javascript 语句。

        所以当我们点击按钮,将表达式写入“显示屏“,该函数便会自动执行计算。

5. try catch


  
  1. //格式
  2. try {
  3. tryCode - 尝试执行代码块
  4. }
  5. catch(err) {
  6. catchCode - 捕获错误的代码块
  7. }
  8. finally {
  9. finallyCode - 无论 try / catch 结果如何都会执行的代码块
  10. }

6. switch-case语句


  
  1. switch ( 表达式 ){
  2. case1:
  3. 语句块1
  4. break;(结束执行,跳出当前语句)
  5. casen:
  6. 语句块n
  7. break;
  8. default:
  9. 语句块n+1( 前面全为false才执行此语句块 )
  10. }

三、完整代码+详细注释


  
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>简易计算器</title>
  6. <style>
  7. .calc {
  8. width: 300px;
  9. height: 400px;
  10. border: 2px solid #149985;
  11. border-radius: 10px;
  12. margin: auto;
  13. background-color: lightgray;
  14. }
  15. #btn {
  16. width: 90%;
  17. height: 320px;
  18. margin: 10px auto 0 auto;
  19. background-color: rgb(238, 234, 234);
  20. }
  21. #btn button {
  22. width: 80px;
  23. height: 35px;
  24. margin: 15px 0 0 3px;
  25. background-color: white;
  26. border: 1px solid #999;
  27. border-radius: 5px;
  28. font-size: 18px;
  29. font-weight: bolder;
  30. }
  31. #btn button:hover {
  32. background-color: #999;
  33. color: white;
  34. cursor: pointer;
  35. }
  36. </style>
  37. </head>
  38. <body>
  39. <div class="calc">
  40. <!-- 显示数字文本域 -->
  41. <!-- readonly设置文本域为只读 -->
  42. <textarea readonly name="" id="text"
  43. style="width: 90%;height: 30px;display: block;margin: 20px auto 0 auto;font-size: 24px;"></textarea>
  44. <!-- 键盘按钮 -->
  45. <div id="btn">
  46. <button>1</button>
  47. <button>2</button>
  48. <button>3</button>
  49. <button>4</button>
  50. <button>5</button>
  51. <button>6</button>
  52. <button>7</button>
  53. <button>8</button>
  54. <button>9</button>
  55. <button>0</button>
  56. <button>C</button>
  57. <button>+</button>
  58. <button>-</button>
  59. <button>*</button>
  60. <button>/</button>
  61. <button style="width: 98%;">=</button>
  62. </div>
  63. </div>
  64. </body>
  65. <script>
  66. //获取按键区域的元素(键盘)
  67. var btn = document.getElementById('btn');
  68. //绑定事件处理函数
  69. btn.onclick = function (e) {
  70. //判断只有点击到按钮上才会将信息录入“显示屏”
  71. if (e.target.nodeName === "BUTTON") {
  72. //获取文本域元素(显示屏)
  73. var text = document.getElementById('text');
  74. //switch 判断当前点击的按钮内容
  75. switch (e.target.innerHTML) {
  76. //点击C清空屏幕
  77. case 'C':
  78. text.value = '';
  79. break;
  80. //如果点击=,获得显示屏中的表达式并计算结果
  81. case "=":
  82. var str = text.value;
  83. //尝试计算显示屏中的内容
  84. try {
  85. //将显示屏的内容交给eval做计算,将结果再替换回显示屏中
  86. text.value = eval(str)
  87. } catch (err) {
  88. text.value = err;
  89. }
  90. break;
  91. //点击其他的按钮,将按钮内容追加到显示屏上
  92. default:
  93. text.value += e.target.innerHTML;
  94. }
  95. }
  96. }
  97. </script>
  98. </html>

文章来源: majinjian.blog.csdn.net,作者:Developer 小马,版权归原作者所有,如需转载,请联系作者。

原文链接:majinjian.blog.csdn.net/article/details/122671364

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。