Comments (7)
// 点击li弹出第几项,不用es6,就是考察的闭包
var dom = document.querySelectorAll('#list li'); dom.forEach(function(dom, index) { (function(index) { dom.addEventListener('click', function(e) { e.stopPropagation(); console.log(index); }); }(index)); });
from frontend-interview.
事件委托 弹窗显示其为当前列表中的第几项
var list=document.getElementById('list');
var aLi=list.getElementsByTagName('li');
list.addEventListener('click',function(e){
var target=e.target || e.srcElement;
if(target.nodeName.toLowerCase() === 'li'){
for(var i=0,Len=aLi.length;i<Len;i++){
if(aLi[i] === target){
alert(i);
}
}
}
})
from frontend-interview.
不要给每个 li 都绑一个 listener
ul.addEventListener('click', e => {
e.stopPropagation()
if (e.target.tagName.toLowerCase() === 'li')
alert(e.target.classList)
})
from frontend-interview.
@YuanwuHu 强迫症的我很想在alert(i);后面加个break; XD
from frontend-interview.
@upfain 在第六个后面添加应该是let six = document.querySelectorAll('li')[5]吧
from frontend-interview.
let ul = document.getElementById('ul');
ul.addEventListener('click',click,false)
function click(e) {
let arr = Array.prototype.slice.call(e.target.parentNode.children)
alert(arr.indexOf(e.target));
}
from frontend-interview.
借用前面几位老哥的答案,整理一下:
/**
* 1. 为ul添加一个类bar
* 2. 删除第10个li
* 3. 在第5个li后边添加一个li,文字内容为insert
* 4. 点击任意一个li弹窗显示其为当前列表中第几项
*/
let ul = document.getElementById('list');
let lis = document.getElementsByTagName('li');
// 添加类
ul.className += ' bar';
// 删除第10个li
lis[9].parentNode.removeChild(lis[9]);
// 第6个li后插入li
let tag = document.createElement('li');
tag.innerHTML = 'insert'
lis[6].parentNode.insertBefore(tag, lis[6])
// 点击
ul.addEventListener('click', e=>{
e.stopPropagation();
if (e.target.tagName.toLowerCase() === 'li'){
let lis = document.getElementsByTagName('li');
lis = [].slice.call(lis)
alert(lis.indexOf(e.target))
}
})
from frontend-interview.
Related Issues (20)
- JS 作用域链相关问题 HOT 5
- JS 作用域、原型链 HOT 3
- 重复声明两个函数会怎样? HOT 4
- ES5中“严格模式”与“非严格模式”的区别? HOT 3
- ajax请求序列化问题 HOT 5
- 循环/闭包/setTimeout/Promise 综合 HOT 1
- 服务端如何区分不同的用户 HOT 4
- 使用ES6实现该方法 HOT 13
- 什么是FP?与OOP的关系?
- 为何会出现浏览器兼容性问题?如何解决? HOT 2
- 前端性能优化 HOT 2
- JavaScript 分组 HOT 13
- 自适应和响应式有什么区别和联系
- 如何实现深拷贝? HOT 1
- 两个js数组相关题目 HOT 7
- 面试题汇总
- jrg interview questions HOT 7
- 实现一个深拷贝 HOT 8
- 宏任务微任务题 HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from frontend-interview.