<ul id="list" class="foo">
  <li>#0</li>
  <li><span>#1</span></li>
  <li>#2</li>
  <li>#3</li>
  <li><ul><li>#4</li></ul></li>
  ...
  <li><a href="//v2ex.com">#99998</a></li>
  <li>#99999</li>
  <li>#100000</li>
</ul>
<ul> 添加一个类 bar<li><li> 后面增加一个 <li> , 其文字内容为 <v2ex.com /><li> 弹窗显示其为当前列表中的第几项。最近又来了个资深工程师面试,结果现场写代码环节写不出上面类似的题目。🌚
讲道理这题真的不难啊,就是简单的 DOM 操作,没有任何奇技淫巧,现场写:一台 MBP / 30 分钟 / 允许 Google ,只要基本功够扎实应该都能写出来吧。
其实现场考的版本比这个还简单,这个是为了发帖稍微整理后的版本,大家来喷一波。
(顺便补个广告,招前端,薪资对标阿里 P6 ,可年后入职,年前入职可以补偿年终奖,因为不是招聘结点我就不放邮箱了,有兴趣私我哈)
|      101suniven      2016-12-22 21:36:12 +08:00 // 不知道我理解错题意了没有……求轻喷啊 function loopTargetAction(list, index, action) { if(index === '*') { for(var i = 0; i < list.length; i++) { action(list[i], i) } } else { action(list[index], index) } } var uls = document.querySelectorAll('ul') loopTargetAction(uls, '*', function(ulEl) { ulEl.classList.add('bar') }) var lis = document.querySelectorAll('li') loopTargetAction(lis, 9, function(liEl) { liEl.parentNode.removeChild(liEl) }) loopTargetAction(lis, 498, function(liEl) { var li = document.createElement('li') li.textContent = '<v2ex.com />' liEl.nextSibling.insertBefore(li) }) loopTargetAction(lis, '*', function(liEl, index) { liEl.addEventListener('click', function() { alert(index) }, false) }) | 
|      102sebaogege      2016-12-22 23:58:00 +08:00 添加一个类 bar 是什么意思 | 
|  |      103Tonni      2016-12-24 20:40:24 +08:00 稍微改了下,应该满足需求了,之前没看仔细 ;-)。 | 
|  |      104xwartz      2016-12-24 22:20:40 +08:00 类 bar  是什么鬼?  className ? | 
|  |      105tushiner      2016-12-28 17:41:36 +08:00 对于我来说,难点在于玩不转 MBP 。。说正题,除了节点后插入新节点没有现成的 API 以外,其他几个题目,无论是用 CSS 选择器或者遍历节点的方式,都能找到目标元素完成相关操作。所以,此组题目的考点分为至少两层,即 DOM 相关 API 熟悉程度与高性能的 DOM 操作技巧。 | 
|  |      106cleveryun      2017-01-06 16:49:25 +08:00 看了评论一圈,写了个答案,试了下应该没问题。另外,我这里不涉及字符串转码,看了各位用 html 而非 text 的,其实只用把“<”这个符号转成“<”就可以了,其他的比如“>”是没必要转的^_^。 https://github.com/Yakima-Teng/memo#dom 基础 | 
|  |      107cleveryun      2017-01-06 16:51:40 +08:00 上面的链接地址后面有“基础”两个字的,被 V2EX 给分开了,要加上才能定位到正确的位置。 |