首页 > 为什么弹出来的是a的地址,而不是<a></a>这个dom呢

为什么弹出来的是a的地址,而不是<a></a>这个dom呢

(function() {
  var resources = document.getElementById('resources');
  var links = resources.getElementsByTagName('a');
  var all = links.length;
  for (var i = 0; i < all; i++) {
    //循环绑定
    links[i].addEventListener('click', handler, false);

  };
  function handler(e) {
    var x = e.target; 
    alert('addEventListener绑定: '+ x);
    e.preventDefault();
  };
})();

为什么弹出来的是a的地址,而不是这个dom呢,我var x= this也是一样的


alert('addEventListener绑定: '+ x);

修改为:

alert('addEventListener绑定: '+ x.outerHTML);

原因

'addEventListener绑定: '+ x 其实等价于 'addEventListener绑定: '+ x.toString()


是因为js alert的时候会把内容toString(),还有就是字符串拼接的时候也会转换一下。你直接console.log(x)就会显示出该dom元素。


虽然通过隐式转换可以获取href,是个小技巧,但我觉得应该尽量避免这种晦涩的写法,影响可读性。
软件的维护时间比开发时间长的多,所以代码最好尽量简明自然。使用 linkDom.outerHTML/linkDom.getAttribute('href')类似的写法。


a.toString();

就是 a.href 了,所以不是问题,你可以用 typeof a 验证一下

alert('' + typeof x);
【热门文章】
【热门文章】