- 主题:这段js该怎么写啊
不是不能用i,只是i的值和你期待的不一样。
lis没有被重新赋值所以它一直是<ul>的引用。i在循环的每一个步骤都被重新赋值了,最后的值等于lis.length,所以当click事件发生的时候i还是等于lis.length,无论你点的是哪个<li>。
vscode有代码提醒的功能。
【 在 Splunk 的大作中提到: 】
: 我大概有点儿了解。 callback里面的i,要换成 ii..最后通过参数把i传递进去
: 我还有个问题,为什么lis变量,可以在里面使用,你看我代码console.log(lis)
:
--
修改:a9udn9u FROM 54.240.198.*
FROM 54.240.198.*
你这个跟他最初的代码是一样的,当事件处理函数被调用的时候,i已经变成lis.length了,把它的值赋给i0,i0也就等于lis.length。
不过他第二次的代码没有用到i,所以跑起来没问题,只是代码不算优化。
【 在 a0123456789q 的大作中提到: 】
: //本方案是错误的。请参加楼下的帖子
:
: function setup() {
: ...................
--
FROM 54.240.198.*
你的第二个实现功能上是可以的,只是有几个小问题。比如if (e.target.nodeName === 'LI')这个判断不需要了因为你的selector选出的就是<li>节点。还有你可以考虑一下event delegation,把事件处理函数放在<ul>上,而不是每个<li>上,这样只需要一个事件处理函数,加减列表内容的时候不用记着要调用addEventHandler,还可以省点内存。
【 在 Splunk 的大作中提到: 】
: 我的实现有错?实现没用i了,错在哪里?
: 你的意思是注释里面想用 lis[i]是错误的吧?
: 但还有个疑问,就是为什么lis可以用呢?
: ...................
--
修改:a9udn9u FROM 54.240.198.*
FROM 54.240.198.*
大牛!
我彻底明白了
【 在 a9udn9u (******) 的大作中提到: 】
: 你的第二个实现功能上是可以的,只是有几个小问题。比如if (e.target.nodeName === 'LI')这个判断不需要了因为你的selector选出的就是<li>节点。还有你可以考虑一下event delegation,把事件处理函数放在<ul>上,而不是每个<li>上,这样只需要一个事件处理函数,加减列
--
修改:Splunk FROM 61.171.205.*
FROM 61.171.205.*
起这么吊的名字,还需要问前端问题。
我之前在产品上借鉴学习过Splunk,真是一直被抄袭,从未被超越的产品
不过你要用传统前端路数实现Splunk估计是没戏的。
【 在 Splunk 的大作中提到: 】
: //实现功能:点击哪个 <li>就移动到第一个
: function setup() {
: var lis = document.querySelectorAll('ul li');
: ...................
--
修改:dhcn FROM 106.11.34.*
FROM 106.11.34.*
很吊吗,小公司哎。做log分析的。
你学习Splunk,不要抄袭啊,小心收到法律信
【 在 dhcn (小石) 的大作中提到: 】
: 起这么吊的名字,还需要问前端问题。
: 我之前在产品上借鉴学习过Splunk,真是一直被抄袭,从未被超越的产品
: 不过你要用传统前端路数实现Splunk估计是没戏的。
: ...................
--
FROM 61.171.205.*
你要抄Slunk,建议上比较重Ng,用传统那点花样基本都没戏。
【 在 Splunk 的大作中提到: 】
: 很吊吗,小公司哎。做log分析的。
: 你学习Splunk,不要抄袭啊,小心收到法律信
:
--
FROM 221.218.41.*
function setup() {
const ul = document.querySelector('ul');
ul.removeEventListener('click', ulClick)
ul.addEventListener('click', ulClick)
}
function ulClick(event) {
const ul = document.querySelector('ul');
console.log(event.target)
ul.insertBefore(event.target, ul.querySelector('li'))
}
document.body.innerHTML = `<ul><li>A</li><li>B</li><li>C</li></ul>`
setup();
lis可以在for里边使用是变量的传递。lis[i]为 undefined 是 for 循环的原故,每次使用时 i == lis.length,所以 lis[lis.length] undefined。解决这个问题,var 改为 let,或者事件函数外弄个自执行函数,i 做为实参传入。
--
FROM 202.105.193.*
var改成let,这个i变量就可以在function(e)内部直接用了吗?
【 在 luoyuecheng (luoyuecheng) 的大作中提到: 】
: function setup() {
: const ul = document.querySelector('ul');
: ul.removeEventListener('click', ulClick)
: ...................
--
修改:Splunk FROM 61.171.205.*
FROM 61.171.205.*
【 在 Splunk 的大作中提到: 】
: var改成let,这个i变量就可以在function(e)内部直接用了吗?
:
是的,let会把i变成块级作用域。
--
FROM 202.105.193.*