a标签包含a标签
浏览器可能是为了避免a的转跳重复,所以禁止了a标签包含a标签,如何你的代码中有a标签包含a标签,那么浏览器将会重新编码外层a标签,取外层a标签与内层a标签的差集,加上外层a标签,并把外层a标签去掉。这样就会破坏我们的html结构。
因此我编码的时候一定要避免a标签包含a标签
我这次重构代码的时候遇到了这样的代码,但是html结构我并不想修改他的。
我思路是:
一、用div对外层a标签进行模拟
二、用div对内层a标签进行模拟
模拟用的div用点击事件截获,最后创建a标签执行a标签的默认方法
// 这是我对外层a标签进行模拟用的代码
function div_a_click(e){
var target_elem = e.target || e.srcElement;
var a_tag_RegExp = /[^http://|^https://][sS]*/;
while(!(target_elem === this || target_elem.tagName == 'BODY')){
if (target_elem.tagName == 'A' && a_tag_RegExp.test(target_elem.href)) {
return;
}
target_elem = target_elem.parentNode;
}
var a = document.createElement('a');
a.href = this.getAttribute('href');
a.target = target_elem.getAttribute('target');
target_elem.parentNode.appendChild(a);
a.click();
target_elem.parentNode.removeChild(a);
}