html a标签包含a标签,浏览器的行为处理

时间:2023-03-10 02:54:09
html a标签包含a标签,浏览器的行为处理

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:\/\/][\s\S]*/;
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);
}