How to get current element in getElementsByClassName

前端 未结 3 1811
暗喜
暗喜 2020-12-29 11:23

Consider a simple JS event of

document.getElementsByClassName(\'test\')[0].onclick=function(){
document.getElementsByClassName(\'test\')[0].innerHTML = \'New          


        
相关标签:
3条回答
  • 2020-12-29 11:42

    Just use this inside the function. this will be the element on which the event is being fired.

    (function() {
        var elms = document.getElementsByClassName("test"),
            l = elms.length, i;
        for( i=0; i<l; i++) {
            (function(i) {
                elms[i].onclick = function() {
                    this.innerHTML = "New Text";
                };
            })(i);
        }
    })();
    

    It's a bit more complicated than jQuery's:

    $(".test").click(function() {
        $(this).html("New Text");
    });
    

    But it'll be significantly faster without the bloat that jQuery adds ;)

    0 讨论(0)
  • 2020-12-29 11:46
    var all = document.getElementsByClassName('test');
    for(var i=0;i<all.length;i++)
        all[i].onclick=function(){
            this.innerHTML = 'New Text';
        }
    

    But it's most recommended to use addEventListener (or attachEvent, in IE/Some versions of Opera, I guess):

    var all = document.getElementsByClassName('test');
    for(var i=0;i<all.length;i++)
        all[i].addEventListener('click',function(){//If you're gonna use attachEvent, use 'onclick' instead of 'click'
            this.innerHTML = 'New Text';
        }});
    
    0 讨论(0)
  • 2020-12-29 11:49

    Just iterate over them:

    var elements = document.getElementsByClassName('test');
    
    for (var i = 0; i < elements.length; i++) {
        elements[i].addEventListener('click', (function(i) {
            return function() {
                this.innerHTML = 'New Text';
            };
        })(i), false);
    }​
    

    I used (function(i) { return function() { ... }; })(i) instead of just function() { ... } because if you happen to use i in the callback, the value of i will be elements.length - 1 by the time you call it. To fix it, you must shadow i and make it essentially pass by value.

    0 讨论(0)
提交回复
热议问题