2017.8参加了阿里的内推。面试前被要求作了一道编程题,如今分享一下。html
题目要求:
巴拉巴拉具体忘记了,大概就是一个列表,每一个列表后面有个删除按钮,点击相应的删除按钮就能够删除相应的列表的其中一行,而且要以面向对象的方式实现。题目知识点:闭包,构造函数与原型。下面是个人代码:面试
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!--code here--> <title>demo</title> <style> * { padding: 0; margin: 0; } .head, li div { display: inline-block; width: 70px; text-align: center; } li .id, li .sex, .id, .sex { width: 15px; } li .name, .name { width: 40px; } li .tel, .tel { width: 90px; } li .del, .del { width: 15px; } ul { list-style: none; } .user-delete { cursor: pointer; } </style> </head> <body> <div id="J_container"> <div class="record-head"> <div class="head id">序号</div> <div class="head name">姓名</div> <div class="head sex">性别</div> <div class="head tel">电话号码</div> <div class="head province">省份</div> <div class="head">操做</div> </div> <ul id="J_List"> <li> <div class="id">1</div> <div class="name">张三</div> <div class="sex">男</div> <div class="tel">13788888888</div> <div class="province">浙江</div> <div class="user-delete">删除</div> </li> <li> <div class="id">2</div> <div class="name">李四</div> <div class="sex">女</div> <div class="tel">13788887777</div> <div class="province">四川</div> <div class="user-delete">删除</div> </li> <li> <div class="id">3</div> <div class="name">王二</div> <div class="sex">男</div> <div class="tel">13788889999</div> <div class="province">广东</div> <div class="user-delete">删除</div> </li> </ul> </div> <script> // 此处也可换成ES6的写法 function Contact() { this.init(); } // your code here Contact.prototype.init = function () { btn = document.getElementsByClassName('user-delete'); li = document.getElementsByTagName('li'); for (let i = 0; i < btn.length; i++) { li[i].onclick = function () { this.remove(); } } }; new Contact(); </script> </body> </html>
思考:提交后发现本身的代码有一点问题。题目要求的是点击相应的删除按钮删除列表的相应行。而我是点击整一个<li></li>的任何一处均可以删除。后来思考了一下,将for循环内的代码改成btn[i].onclick = function(){document.getElementById('J_List').removeChild('li[i]')}。可是仍是不行,修改以后发现删除一行以后,dom的序号就变了,与以前取dom产生的数组序号不对应了。暂时没别的想法,有会的同窗能够回复一下,谢谢!编程