html中函数eval,js代码借助函数eval制作简易计算器

之前我们实现一些简易的计算器功能,是通过判断运算符来实现简单的一元运算,但是eval这个函数可以将包含数字和运算符的字符串进行计算,得出运算结果。

1.先写html+css代码,做出一个计算器样子。

0f4985d522f8004e2f41b28b15624a82.png

CSS样式代码:

table {

border-collapse: collapse;

font-size: 20px;

margin: 50px auto;

}

td {

text-align: center;

width: 60px;

height: 40px;

border: 2px solid #cccccc;

background-color: rgb(50, 126, 241);

}

input {

border: none;

outline: none;

background-color: white;

height: 30px;

width: 240px;

}

table tr:nth-child(1) {

height: 40px;

}

td:hover {

opacity: 0.7;

cursor: pointer;

}

tr:nth-child(1) td:hover {

opacity: 1;

}

HTML代码:

傻瓜式计算器

//第一个tr里面放置input元素,并且禁止写入清空退格789+456-123*0.=/

这里特意将清空、退格、和等于这几个添加了class类,是因为这几个按键是需要区别对待的,不属于输入数字和运算符的范围。

2.接下来就是script代码,大致思路就是获取td的一个伪数组,然后给每一个添加事件侦听,通过事件侦听来执行相应的代码

1)通过获取点击的td的class的属性值来判断,如果没有class类,e.tatget.getAttribute("class")的值就是undefined,判断为false,此时就是数字,小数点和运算符等被点击

2)获取的e.tatget.getAttribute("class")是"clear"的话,代表清空input,令input.value="";

3)获取的e.tatget.getAttribute("del")是"clear"的话,代表退格input,则将input.value的值从头复制到倒数第二个为止,重新赋给input.value;

4)获取的e.tatget.getAttribute("del")是"equal"的话,代表计算input,将input.value字符串进行计算,返回计算结果给input.value进行显示。

var input = document.querySelector("input");//显示框

var clear = document.querySelector(".clear");//清空

var del = document.querySelector(".del");//退格

var equal = document.querySelector(".equal");//等于

var tds = document.querySelectorAll("td");//获取td元素的伪数组

init();

function init() {

for (var i = 1; i < tds.length; i++) {//这里i从1开始,是因为第一个td不是按键,里面是input元素,因此要剔除

tds[i].addEventListener("click", clickHandler);//给每个td添加一个事件侦听

}

}

function clickHandler(e) {

e.stopPropagation();//阻止冒泡

if (!e.target.getAttribute("class")) {//当不具有class属性的td被点击时

input.value += this.textContent;//this表示点击的那个td,this.textContext表示td里面的数字或运算符号

} else if (e.target.getAttribute("class") === "clear") {//当清空键被点击时,让显示框显示为空

input.value = "";

} else if (e.target.getAttribute("class") === "del") {//当退格键被点击时,先将显示框里的字符串赋给str,再取str的0-倒数第二位复制,再赋给input.value显示

var str = input.value;

input.value = str.slice(0, str.length - 1);

} else if (e.target.getAttribute("class") === "equal") {//当等于键被点击时,将字符串给eval函数进行计算,结果再赋给input.value进行显示。

input.value = eval(input.value);

}

}

标签:getAttribute,value,js,eval,计算器,var,input,td,class

来源: https://www.cnblogs.com/shenyunfeng123/p/12641601.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值