2

2017.8参加了阿里的内推。面试前被要求做了一道编程题,现在分享一下。

题目要求:
巴拉巴拉具体忘记了,大概就是一个列表,每个列表后面有个删除按钮,点击相应的删除按钮就可以删除相应的列表的其中一行,并且要以面向对象的方式实现。题目知识点:闭包,构造函数与原型。下面是我的代码:

<!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产生的数组序号不对应了。暂时没别的想法,有会的同学可以回复一下,谢谢!


hdu_bomb
28 声望0 粉丝

下一篇 »
网易内推笔试