
1 xjp 2016-07-18 15:46:46 +08:00 ``` links[i]. Onclick= function () { addClass(this, "cc-selected cc-focused") }; ``` 这里的 this 指向的是全局 而不是你希望的 links[i],这里弄个闭包吧 |
2 narcotics 2016-07-18 15:51:48 +08:00 循环中创建闭包是最常见的 Javascript 大坑之一,参见 https://developer.mozilla.org/cn/docs/Web/Javascript/Closures#Creating_closures_in_loops_A_common_mistake 另外,你这代码哪儿有 「删除样式」的逻辑? |
3 adv007 2016-07-18 16:06:59 +08:00 via iPhone 实现这种完全不需要遍历元素啊,楼主在动动脑子。你只需要记录一个当前高亮节点,并且在单击的时候重新指向新的当前节点 |
4 YuJianrong 2016-07-18 16:12:14 +08:00 via iPhone 1 , 2 楼确定?我记得时间处理函数的 this 就是 node 元素, lz 用法并没有问题。 |
5 narcotics 2016-07-18 16:22:57 +08:00 @YuJianrong 是的,我的错~看到循环闭包就觉得有问题,这里的 this 没问题 |
6 sjw199166 2016-07-18 17:49:30 +08:00 因为你没有清除 ;你在上面加一行 清楚所有那个的样式 |
7 sjw199166 2016-07-18 17:51:05 +08:00 links[i]. Onclick= function () { //这个去除所有的按钮样式 addClass(this, "cc-selected cc-focused") } |
8 iTakeo 2016-07-18 17:52:56 +08:00 via iPhone 这里的 this 并没有问题 |
9 iyangyuan 2016-07-18 19:06:51 +08:00 via iPhone 没看到清除的代码 |
10 LancerComet 2016-07-18 19:15:24 +08:00 没有删除样式的代码 楼主可以递归 this 的 previousElementSibling 跟 nextElementSibling ,或者找 parentNode 的 children |
11 rain0002009 2016-07-18 20:18:31 +08:00 点击高亮么? 只要结构好 js 都不用写 纯 css+html 的 radio 标签就可以实现 |
12 yiyizym 2016-07-18 20:44:18 +08:00 links[i]. Onclick= function () { //先删除所有 [].slice.call(links).forEach(function(link){link.classList.remove('cc-selected', 'cc-focused')}); addClass(this, "cc-selected cc-focused") } |