基础JavaScript练习(一)
任务目的
- 学习与实践JavaScript的基本语法、语言特性
- 初步了解JavaScript的事件是什么
- 初步了解JavaScript中的DOM是什么
任务描述
- 如图,模拟一个队列,队列的每个元素是一个数字,初始队列为空
- 有一个input输入框,以及4个操作按钮
- 点击"左侧入",将input中输入的数字从左侧插入队列中;
- 点击"右侧入",将input中输入的数字从右侧插入队列中;
- 点击"左侧出",读取并删除队列左侧第一个元素,并弹窗显示元素中数值;
- 点击"右侧出",读取并删除队列又侧第一个元素,并弹窗显示元素中数值;
- 点击队列中任何一个元素,则该元素会被从队列中删除
任务注意事项
- 实现简单功能的同时,请仔细学习JavaScript基本语法、事件、DOM相关的知识
- 请注意代码风格的整齐、优雅
- 代码中含有必要的注释
- 示例图仅为参考,不需要完全一致
- 需要考虑数字输入的合法性
- 建议不使用任何第三方库、框架
任务完成与总结:
还是一脸的懵Zzzz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | //事件绑定函数,兼容浏览器差异 function addEvent(element, event, listener) { if (element.addEventListener) { element.addEventListener(event, listener, false ); } else if (element.attachEvent) { element.attachEvent( "on" + event, listener); } else { element[ "on" + event] = listener; } } //遍历数组的方法,针对数组中每一个元素执行fn函数,并将数组索引和元素作为参数传递,后面用 function each(arr, fn) { for ( var cur = 0; cur < arr.length; cur++) { fn(arr[cur], cur); } } window.onload = function () { var container = document.getElementById( "container" ); var buttonList = document.getElementsByTagName( "input" ); //定义队列的对象 var queue = { str: [], leftPush: function (num) { this .str.unshift(num); this .paint(); }, rightPush: function (num) { this .str.push(num); this .paint(); }, isEmpty: function () { return ( this .str.length == 0); }, leftPop: function () { if (! this .isEmpty()) { alert( this .str.shift()); this .paint(); } else { alert( "The queue is already empty!" ); } }, rightPop: function () { if (! this .isEmpty()) { alert( this .str.pop()); this .paint(); } else { alert( "The queue is already empty!" ); } }, paint: function () { var str = "" ; each( this .str, function (item){str += ( "<div>" + parseInt(item) + "</div>" )}); container.innerHTML = str; addDivDelEvent(); }, deleteID: function (id) { console.log(id); this .str.splice(id, 1); this .paint(); } } //为container中的每个div绑定删除函数 function addDivDelEvent() { for ( var cur = 0; cur < container.childNodes.length; cur++) { //这里要使用闭包,否则永远绑定到指定div上的delete函数的参数永远等于跳出时的cur值(length); addEvent(container.childNodes[cur], "click" , function (cur) { return function (){ return queue.deleteID(cur)}; }(cur)); } } //为4个按钮绑定函数 addEvent(buttonList[1], "click" , function () { var input = buttonList[0].value; if ((/^[0-9]+$/).test(input)) { queue.leftPush(input); } else { alert( "Please enter an interger!" ); } }); addEvent(buttonList[2], "click" , function () { var input = buttonList[0].value; if ((/^[0-9]+$/).test(input)) { queue.rightPush(input); } else { alert( "Please enter an interger!" ); } }); addEvent(buttonList[3], "click" , function (){queue.leftPop()}); addEvent(buttonList[4], "click" , function (){queue.rightPop()}); } |
先保存着,日后再看再研究。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?