原生js练习题---第三课

0x1用typeof查看数据类型

略过,不过typeof用来判断数据类型是不太靠谱的,尤其是涉及到引用类型的时候,除非是要检测一个变量是否有定义,否则最好采用Object.prototype.toString方法。

0x2用parseInt解析数字,并求和

实现效果:
3-02用parseInt解析数字,并求和

对这道题来说,用户的输入无法三种:数字、非数字、空字符(不输入);而原题里的实现为防止用户可谓是处心积虑,空字符直接弹窗、而非数字用keyup事件实现输一个删一个,用户只能乖乖输入数字了。但有个bug,按着按钮不动是交替触发keydownkeypress,这时输一个删一个的效果就没用了。

我这里更进一步修复了这个bug,想法很简单---我可以等你输完再把非数字全替换掉,只要把replace方法的正则改成全局匹配就ok。不过尴尬的是,既然有了这个无死角防止输入非数字的效果,还要parseInt干嘛。。。

0x3累加按钮,自加1

实现效果:
3-03累加按钮,自加1

0x4输入两个数字,比较大小

实现效果:
3-04输入两个数字,比较大小

第二题的变种,这次还是正常点,改用正则判断,不用第二题那魔性的自动删除字符了。

0x5页面加载后累加,自加1

实现效果:
3-05页面加载后累加,自加1

第三题的变种,换成setInterval触发变化而已。

0x6判断数字是否为两位数

实现效果:
3-06判断数字是否为两位数

继续正则判断,这一期的题有点无聊啊。。

0x7网页计算器

实现效果:
3-07网页计算器

这题算是比较综合的题,所以相比前面的题目花了更多的时间,难点就是功能的实现。这里我的实现思路是比较简单的:就是用一个缓存区显示输入,再用一个公式区用缓存的数据构造计算式,最后点击等号时直接把计算式字符串用eval()执行输出。

这样一来这题就变成字符串处理了,在构造计算式时有很多分支情况,因为点击数字、小数点和运算符得考虑上一步的输入,一共有五种情况:运算符、数字、小数点、上一步的error、输入溢出屏幕。穷举出所有情况后,接下来就用正则判断出这些分支,以及对这些分支的各自处理了。

如上所述,因为只是简单粗暴的穷举,所以js里写了一堆if-else,感觉有点ugly⊙︿⊙。

除了js,还学到了一些新东西:比如文本框可以用readonly属性设置只读、用maxlength属性限制输入字符的个数(只能限制用户输入,如果像这题里直接修改文本框的value的话,这个限制是没有卵用滴)。

再者,在按钮样式设计上,这里使用了sprite图来做按钮效果,相比用纯css有更好的兼容性和可定制性;同时也了解到纯色的背景图片可以做得更小、要用时再平铺开来,能有效提高网页的性能。

08简易网页时钟

实现效果:
3-08简易网页时钟

以一秒为周期获取当前时间进行更新即可。要注意的是得输出的时间字符串都必须为两位,这里使用replace方法搭配正则进行格式化,由于正则本身就有判断和筛选的作用,就不用再罗哩罗嗦地去判断每个字符串的长度了,写起来更加简洁优雅。

09倒计时时钟(100秒)

实现效果:
3-09倒计时时钟(100秒)

核心内容和上一题差不多,只是把计时改变的内容由实时的时间换成了递减的秒数、再加上一个按钮控制动作。为了封装性更好,这里还用了一个单例对象来实现计时器,减少了无谓的全局变量。有了这个干净的接口,代码看起来清爽多了~

原生JS中的el-table是指element-ui库中的表格组件。它可以通过使用element-ui提供的API来创建和操作表格。在原生JS中,可以使用以下代码来创建el-table组件: ```javascript // 创建el-table组件 var table = document.createElement('el-table'); table.setAttribute('v-loading', 'dataListLoading'); table.setAttribute(':data', 'dataList'); table.setAttribute('border', ''); table.setAttribute('align', 'center'); // 创建el-table-column组件 var column = document.createElement('el-table-column'); column.setAttribute(':label', 'item.propName'); column.setAttribute(':property', 'item.propItem'); column.setAttribute('v-for', 'item in tableColumnList'); column.setAttribute(':key', 'item.prop'); column.setAttribute('align', 'center'); // 创建template和span元素 var template = document.createElement('template'); var span = document.createElement('span'); span.textContent = '{{scope.row\[scope.column.property\]}}'; // 将span元素添加到template中 template.appendChild(span); // 将template元素添加到el-table-column组件中 column.appendChild(template); // 将el-table-column组件添加到el-table组件中 table.appendChild(column); // 将el-table组件添加到页面中的某个元素中 var container = document.getElementById('container'); container.appendChild(table); ``` 以上代码是通过原生JS动态创建el-table组件的示例。你可以根据自己的需求进行修改和扩展。 #### 引用[.reference_title] - *1* [el-table 动态表格实现+原生表格实现代码](https://blog.csdn.net/weixin_50748620/article/details/123419248)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [el-table表格——获取单击的是第几行和第几列 & 表格排序之el-table与sort-change、el-table-column与sort-...](https://blog.csdn.net/weixin_44867717/article/details/125618132)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值