Javascript 有没有办法动态地将onclick事件应用于大型li列表?

Javascript 有没有办法动态地将onclick事件应用于大型li列表?,javascript,Javascript,好的,我有一个无序的列表如下: <ul id=list> <li> Item 1 </li> <li> Item 2 </li> <li> Item 3 </li> <li> Item 4 </li> <li> Item 5 </li> </ul> 再说一次,有什么简单的方法吗?我知道我可以通过简单地为每个李个人

好的,我有一个无序的列表如下:

<ul id=list>
    <li> Item 1 </li>
    <li> Item 2 </li>
    <li> Item 3 </li>
    <li> Item 4 </li>
    <li> Item 5 </li>
</ul>
再说一次,有什么简单的方法吗?我知道我可以通过简单地为每个李个人添加一个onclick事件来实现这一点,但是有什么聪明的方法可以做到这一点吗


(为了澄清-我实际上将使用移动webkit的“ontouchstart”事件)

在forloop中遍历它们

并向每个添加“.onclick=someFunction”代码


  • 项目1
  • 项目2
  • 项目3
  • 项目4
  • 项目5
  • 
    var parentNode=document.getElementById('list');
    var theChilds=parentNode.getElementsByTagName(“LI”);
    for(var i=0;i

    请参见此处:

    在forloop中遍历它们

    并向每个添加“.onclick=someFunction”代码

    
    
  • 项目1
  • 项目2
  • 项目3
  • 项目4
  • 项目5
  • 
    var parentNode=document.getElementById('list');
    var theChilds=parentNode.getElementsByTagName(“LI”);
    for(var i=0;i
    请参见此处:

    尝试使用或之类的库

    例如,dojo:

    dojo.query("#list li").connect("onclick", function(){alert("Ho!");});
    
    在jquery中:

    $("#list li").click(function(e){ alert("Yo!");});
    
    尝试使用诸如或之类的库

    例如,dojo:

    dojo.query("#list li").connect("onclick", function(){alert("Ho!");});
    
    在jquery中:

    $("#list li").click(function(e){ alert("Yo!");});
    
    使用jquery:

    $("#list li").click(function(){
        $(this).css('background-color', '... your background color ...');
        $(this).css('color', '... your font color ...');
    })
    
    使用jquery:

    $("#list li").click(function(){
        $(this).css('background-color', '... your background color ...');
        $(this).css('color', '... your font color ...');
    })
    

    如果您不想使用任何第三方库,如jQuery,可以尝试以下方法

    var parentNode = document.getElementById('list');
    parentNode.onclick=function(e){
        e = e || event;
        var target = e.originalTarget || e.srcElement;
        if(target.nodeName == "LI"){
            alert(target.innerHTML);
        }
    }
    
    代码使用javascript。它将有助于减少页面中注册的单击事件的数量,并有助于提高性能

    但我强烈要求您考虑使用一些成熟的库,例如

    使用jquery,它将非常简单

    $("#list").delegate("li", "click", function(){
        $(this).css('background-color', 'your color');
        $(this).css('color', 'your color');
    });
    

    我建议使用,因为它将有助于减少页面中注册的单击事件数。

    如果您不想使用任何第三方库,如jQuery,可以尝试

    var parentNode = document.getElementById('list');
    parentNode.onclick=function(e){
        e = e || event;
        var target = e.originalTarget || e.srcElement;
        if(target.nodeName == "LI"){
            alert(target.innerHTML);
        }
    }
    
    代码使用javascript。它将有助于减少页面中注册的单击事件的数量,并有助于提高性能

    但我强烈要求您考虑使用一些成熟的库,例如

    使用jquery,它将非常简单

    $("#list").delegate("li", "click", function(){
        $(this).css('background-color', 'your color');
        $(this).css('color', 'your color');
    });
    

    我建议使用,因为它将有助于减少页面中注册的单击事件数。

    您也可以调用函数并发送li的id。这意味着您必须为每个li设置一个id。但是你当然可以在for循环中这样做,你也可以调用一个函数并发送li的id。这意味着您必须为每个li设置一个id。但您当然可以在for循环或类似的方式中执行此操作。+1表示事件委派。这是这里唯一明智的做法。可能需要从单击的元素向上遍历DOM以找到
    li
    。是的,您是对的。如果
    li
    中有需要的子元素,那么毫无疑问jQuery要简单得多,我可能应该在生产系统中使用它,但是我仍在学习JavaScript的基础知识,希望在为我预先打包之前真正了解我在做什么。。。感谢您向我展示这两种选择,非常感谢。:-)+活动代表团1人。这是这里唯一明智的做法。可能需要从单击的元素向上遍历DOM以找到
    li
    。是的,您是对的。如果
    li
    中有需要的子元素,那么毫无疑问jQuery要简单得多,我可能应该在生产系统中使用它,但是我仍在学习JavaScript的基础知识,希望在为我预先打包之前真正了解我在做什么。。。感谢您向我展示这两种选择,非常感谢。:-)