感觉yy的笔试题出的很用心,不会随便拿一下数据结构什么的题目过来糊弄~出的题目也几乎没有见过原题。
当然,个人答得好不好是另外一回事了,不会做是自己知识没掌握好,但是题目确实个个经典~
填空、不定向选择、问答、编程,其他不怎么记得了,编程题目倒是还能想起来:
点击ul中的li标签删除
1 <html> 2 <head> 3 <title></title> 4 </head> 5 <body> 6 <script> 7 window.onload = function () { 8 var li = document.getElementsByTagName('li'); 9 for(var i = 0; i<li.length; i++) { 10 li[i].onclick = function () { 11 this.parentNode.removeChild(this); 12 } 13 } 14 } 15 </script> 16 <ul class="itemList"> 17 <li>item 1</li> 18 <li>item 2</li> 19 <li>item 3</li> 20 <li>item 4</li> 21 <li>item 5</li> 22 <li>item 6</li> 23 </ul> 24 </body> 25 </html>
第一题不难,但是我好像没答好,错的地方应该是在
this.parentNode //用以下代替 var ul = document.getElementByClassName('itemList'); ul = ul[0]; //忘记写上这句ORZ
html css3实现圆来回滚动
这本也不是什么难题,但是我错的有点离谱了ORZ,把margin-left 写成了 padding-left,变成了来回拉伸了吧应该!!!
1 <html> 2 <head> 3 <title></title> 4 </head> 5 <body> 6 <style> 7 .circle { 8 width: 100px; 9 height: 100px; 10 background-color: red; 11 border-radius: 50%; 12 animation: move 3s infinite; 13 } 14 15 @keyframes move { 16 0% { 17 margin-left: 0px; 18 } 19 20 50% { 21 margin-left: 400px; 22 } 23 24 100% { 25 margin-left: 0px; 26 } 27 } 28 </style> 29 <div class="circle"></div> 30 </body> 31 </html>
我记得我答题的时候写的代码是如下:
1 <html> 2 <head> 3 <title>aaa</title> 4 </head> 5 <body> 6 <style> 7 .circle { 8 width: 100px; 9 height: 100px; 10 background-color: red; 11 border-radius: 50%; 12 animation: move 3s infinite linear; 13 } 14 15 @keyframes move { 16 0% { 17 margin-left: 0px; 18 translate:rotate(0deg); 19 } 20 21 25% { 22 padding-left: 200px; 23 translate:rotate(180deg); 24 } 25 26 50% { 27 padding-left: 400px; 28 translate:rotate(360deg); 29 } 30 75% { 31 padding-left:200px; 32 translate:rotate(180deg); 33 } 34 100% { 35 padding-left: 0px; 36 translate:rotate(0deg); 37 } 38 } 39 </style> 40 <div class="circle"></div> 41 </body> 42 </html>
见笑见笑ORZ、。。
第三题:
获取cookie的函数
这个题我刚好之前看过一篇文章:
有兴趣或者看不懂下面的代码可以阅读一下;
1 function getCookie(name) { 2 var a; 3 var r = new RegExp(name+"=([^;]*)(;|$)"); 4 if(a = document.cookie.match(r)) 5 return a[1]; 6 else 7 return null; 8 }
唉~很遗憾的是我中毒太深了,之前也没搞懂unescape和escape的编码和解码,以至于我return a[1]的时候加了unescape(a[1]);然后还用了test来匹配= =???
如果你不是很懂正则表达式,我这里简单解释一下,因为document.cookie的存取方式是字符串,而且是以key、value的形式储存的,也就是:
"username=lingjiawen; password=123456; xxx=xxxxxx"
所以,匹配的时候使用
/name=([^;]*)(;|$)/
这个正则表达式来匹配,[^;]* 指的是不匹配";",然后*表示匹配前面元字符0次或多次。
a数组第一个值存的就是匹配值,第二个值存的就是([^;]*)这个匹配值,也就是=号后面的值,假如上面的name="username"
那么a[0]就是"username=lingjiawen",而a[1]就是"lingjiawen",而a[2]便是";"。
写一个EventEmitter函数,包含on,once,off,trigger方法
1 class EventEmitter { 2 constructor() { 3 this.events = {}; 4 this.getEvents = this.getEvents.bind(this); 5 this.getListener = this.getListener.bind(this); 6 this.on = this.on.bind(this); 7 this.off = this.off.bind(this); 8 this.once = this.once.bind(this); 9 this.trigger = this.trigger.bind(this); 10 this.removeEventListener = this.removeEventListener.bind(this); 11 } 12 13 getEvents() { 14 return this.events; 15 } 16 17 getListener(event) { 18 var events = this.getEvents(); 19 return events[event]; 20 } 21 22 on(event, listener, time) { 23 var listeners = this.getListener(event); 24 var listenerWrap = { 25 listener: listener, 26 time: time 27 }; 28 listeners.push(listener); 29 } 30 31 once(event, listener) { 32 return this.on(event, listener, 1); 33 } 34 35 trigger(event, args) { 36 var listeners = this.getListener(event); 37 for(let i=0; i<listeners.length; i++) { 38 var listener = listeners[i]; 39 listener.time --; 40 if(listener.time === 0) { 41 this.removeEventListener(listener); 42 } 43 listener.listener.apply(this, args||[]); 44 } 45 } 46 47 off(event) { 48 var events = this.getEvents(); 49 events[event] = []; 50 } 51 52 removeEventListener(event, listener) { 53 var events = this.getEvents(); 54 var listeners = evetnts[event]; 55 for(let i=0; i<listeners.length; i++) { 56 if(listener == listeners[i]) { 57 delete listeners[i]; 58 } 59 } 60 } 61 62 }
这题用了ES6写的,对不对不是很清楚~
以上题目有更好的想法或者答案、或者我的答案有错误,欢迎留言~!!