本节案例相对复杂,对于布局而言推荐使用表格,数字0-9共10个,运算符有4个,操作符2个,所以正好16个,四行四列的表格。另外需要一个显示选择的表达式,和计算结果的地方,这里也单独使用一个表格,与上述表格紧邻,显得比较好。具体知识点如下:
- 选择表格里的单元格并点击的方法:$('table').find('td').click(function(){})。 ('table').find('td')是找到表格里的单元格,这里有一个层级关系,即td是在table里的子节点。可以想象,如果要找到表格里某一行怎么做呢?思考一下。
- 获得单元格的值然后拼接成表达式,这里就是字符串的拼接,使用+号即可。
- 表达式的分析,字符串拼接后形成了一个字符串数组,获得某一个字符,可以使用其下标来定位。如表达式exp=“3+1“,3是第一个字符,下标是0,因此exp[0]就是3,同理可以判断其他位置的内容。
- 运算:对表达式确定数值和运算符,这里运算符就是第二个字符,判别第二个字符是+-*/中的哪一个,给定对应的计算就行。需要注意的是,加法运算的+很容易变成连接符,因此所以对字符强制转换为数值类型,parseInt或者parseFloat。
https://www.zhihu.com/video/1152524760284995584
该案例代码及说明如下:
<!DOCTYPE html>
<html>
<head>
<title>js09</title>
<style type="text/css">
td{
width: 60px;
height: 40px;
text-align: center;
border: 1px solid red;
}
#exp{
width: 186px;
}
table{
border-collapse: collapse; //去除单元格默认边界
}
</style>
<script src="lib/jquery-3.4.1.min.js" ></script>
</head>
<body>
<h2>jquery实现四则运算</h2>
<hr>
<!-- 放置表达式和结果的表格 -->
<table>
<td id="exp"></td>
<td id="res"></td>
</table>
<!-- 放置数字和运算符 -->
<table id="options">
<tr>
<td>0</td>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
</tr>
<tr>
<td>8</td>
<td>9</td>
<td>*</td>
<td>/</td>
</tr>
<tr>
<td id="cls">cls</td>
<td>=</td>
<td>+</td>
<td>-</td>
</tr>
</table>
</body>
</html>
<script src="js/jss.js"></script>
对应的jss.js脚本如下:
// 网页文档启动状态 $(document).ready(function(){})
$(document).ready(function(){
// 知识点:选择表格里的单元格$('#options').find('td').click(function(){})
// 放置/获取单元格里的文本: text()
// 网页元素对象本身: this
// 拼接单元格里的文本来获得表达式
//表达式是字符串,使用字符串的分割和对象方法
//字符转数值,parseInt,parseFloat
var equ='';
$('#options').find('td').click(function(){
var val=$(this).text(); //$(this)定位的元素自己
equ+=val;//字符串数组
$('#exp').text(equ);
//获得第一个数num1,第二个数num2,运算符
var num1=equ[0];
var num2=equ[2];
var operator=equ[1];
if(operator=='+'){
$('#res').text(parseInt(num1)+parseInt(num2));
}
else if(operator=='-'){
$('#res').text(num1-num2);
}
else if(operator=='*'){
$('#res').text(num1*num2);
}
else if(operator=='/'){
$('#res').text(num1/num2);
}
})
$('#cls').click(function(){
equ=''; //清除表达式的值
$('#res').text(''); //清除结果单元格的显示
$('#exp').text(0); //将表达式单元格显示为0
})
})