javascript:将getElementsByName放入函数中是否可能?

时间:2017-09-27 10:46:38

标签: javascript css

是否可以将getElementsByName()放到一个函数中,以便我不会再在任何标记选择器名称中重复执行此操作?

预期:

getName(name, onclick, iclickit, id, idname);

var elems = document.getElementsByName('name');

for (var i = 0; i < elems.length; i++) {
    elems[i].setAttribute('onclick', afunction);
    elems[i].setAttribute('id', 'testid');
}

调用函数时是否可以放置许多setAttributes()而不是将其放在每个名称选择器中?

2 个答案:

答案 0 :(得分:1)

JavaScript是一种函数式编程语言,这意味着您可以将许多函数组合成所谓的&#34;更高阶函数&#34;。

这是一个例子

&#13;
&#13;
    function aFunction(ev){
        ev.target.style.backgroundColor="red";
    }

    function getName(name, event, id){
        var elems = document.querySelectorAll('[name="'+ name + '"]');
        elems.forEach(function(elem){
            elem.addEventListener(event, aFunction);
            elem.id = id
        })
    }
    
    getName('random', 'click', 'thing');
&#13;
[name="random"]{
    background:blue;
    width:50px;
    height:50px;
}
&#13;
<div name="random"></div> 
<div name="random"></div>
&#13;
&#13;
&#13;

我实际上是将一个函数传递给forEach,然后我从每次迭代中获取输出并添加一个传入函数的侦听器。

答案 1 :(得分:0)

  

是否可以将getElementsByName放入函数中以便我不会   继续在任何标签选择器名称中重复一遍吗?

是的,

function bindEventHandlerByTagName( tagName, evenHandler )
{
   Array.prototype.slice.call( document.getElementsByName( tagName ) ).forEach( function( element ){
      element.addEventListener( 'click', evenHandler );
   });    
}

使用此

bindEventHandlerByTagName( "span", function(){ console.log( "span clicked" ); } );