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);
}
posted @ 2016-11-16 10:35  Silababy  阅读(481)  评论(0编辑  收藏  举报