是否可以将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()
而不是将其放在每个名称选择器中?
答案 0 :(得分:1)
JavaScript是一种函数式编程语言,这意味着您可以将许多函数组合成所谓的&#34;更高阶函数&#34;。
这是一个例子
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;
我实际上是将一个函数传递给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" ); } );