这是在精通javascript里看到的,其实这个方法实现起来还是比较简单,有意思的是它的写法,先看代码:
function attr(elem, name, value) { if (!name || name.constructor != String) return ''; name = { 'for': 'htmlFor', 'class': 'className' } [name] || name; //注意这里 if (value != 'underfined') { elem[name] = value; if (elem.setAttribute) { elem.setAttribute(name, value); } } return elem[name] || elem.getAttribute(name) || ''; }
函数的作用是根据你传的参数来设置或获取元素的属性,如果只传两个参数,那么就是返回元素的属性,如果传三个参数,结果就是设置元素的属性并返回属性值。
这个函数比较出彩的地方在第三行。大家知道,for,class是元素的属性,但也是js里的关键字,所以就得有一个替换的方法,这里的name ={'for':'htmlFor','class':'className'}[name] || name;如果你第二个参数name是for或者class的时候,它会自动替换成相对应的htmlFor,或className,匿名对象里还可以再加其它的关键字,如果有需要的话。这就是它的作用。这个写法大家可以学习一下。