S.all("#playlist li")是所有项的集合,当前有一个触发事件的元素S.one(ev.target),我怎么能获取到该触发事件的元素在集合的索引位置呢?
S.all("#playlist li")
S.one(ev.target)
自己定一下,我不知道去哪里提问。。
没有用过 Kissy,不知道选择器结果是真数组还是类数组(看起来像数组,比如说有 length,但是缺少很多数组方法。DOM 集合都是这样的类数组)。
length
如果是真数组,那么使用 indexOf 方法可以获得索引位置;如果是类数组,那么先用 Array.prototype.slice.call 转一下,再 indexOf 即可。
indexOf
Array.prototype.slice.call
var results = [].slice.call(S.all("#playlist li")); var index = S.one(ev.target).indexOf(results);
应该能行,用 Vanilla JS + DOM 测试过。
嗯,看了一下 MDN,其实可以一句搞定:
[].indexOf.call(S.all("#playlist li"), S.one(ev.target));
不是只有阿里人才用 kissy 的吗?
#2 楼 @nightire 是伪数组。。。这个 indexOf 我看文档上有的,也是针对真数组操作的。
#4 楼 @xiongxin8802 对呀,所以用原型的 slice 转一下就可以当真数组用了呗。
#5 楼 @nightire
var results = [].slice.call(S.all("#playlist li")); var _index = S.indexOf(ev.target,results);
谢谢你了,昨天没细看,不好意思啊,已经成功了