javascript-在YUI中获取Clicked项目的索引

我有以下代码.

HTML

<ul>
    <li class="link"> link 1 </li>
    <li class="link"> link 2 </li>
    <li class="link"> link 3 </li>
    <li class="link"> link 4 </li>
</ul>\

Java脚本

 YUI().use("node", function(Y){

    Y.all(".link").on("click", function(em){
       alert("you clicked on "+ index +"link .");
       node = em.currentTarget;
       node.addClass("clicked");
       // alert(node.get("class"));
    });
     alert(Y.all("li").get("class"));
});

我对此有两个疑问.

1)在第一个警报时,它应该显示类名称“ link”,但它会给警报一些YUI_23123_随机数.为什么这样?

2)我也想提醒索引.例如,当用户单击第三个链接时,它应该警告“您单击了3个链接”,我也想在其他事件中使用此索引值.

我们如何实现该指标?

JSFiddle link

解决方法:

有趣的问题!

对于(1),Y.all(…)返回一个NodeList.不幸的是,一个nodeList的“ get”返回值奇怪地是另一个NodeList,它在打印警报时被解释为您看到的内容.使用“ getAttribute”而不是“ get”可以得到更合理的输出(尽管可能没有用).

对于(2),要实现所需的功能,您将需要显式循环NodeList或使用“ delegate”. Using “delegate”对于页面而言效率更高,并且允许您动态插入“ li”项,但是在成百上千个列表项中,“ indexOf”可能会变得很慢.

使用每个:

Y.all(".link").each(function (node, index) {

    node.on("click", function(em){
        alert("you clicked on "+ index +" link.");
        node.addClass("clicked");
        alert(node.getAttribute("class"));
    });
});

使用委托:

Y.one('ul').delegate("click", function (em) {
    var itemList =  em.container.all('li');;
    var node = em.currentTarget;
    alert("you clicked on "+ itemList.indexOf(node) +" link.");
    node.addClass("clicked");
    alert(node.getAttribute("class"));
}, 'li');
上一篇:JavaScript YUI3使用全局变量吗?


下一篇:javascript – 获得一个简单的YUI示例工作