js中重写a标签的href属性和onclick事件

3 篇文章 0 订阅
3 篇文章 0 订阅

在某些场景下,我们需要对HTML的标签进行重写。这里介绍如何重写a标签的href属性和onclick事件,重写后,每当点击a标签对象都会调用自己重写的方法。

html代码:

<html>
	<title>重写a标签单击事件和href属性</title>
	<head>
		<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
		<script src="rewrite_a.js"></script>
		<script type="text/javascript">
			function abc(){
				alert("abc方法的单击事件执行了");
			}
			function def(){
				alert("def方法的单击事件执行了");
			}
		</script>
	</head>
	<body>
		<a href="http://www.baidu.com">跳转百度</a>
		<a οnclick="abc();">点击弹框</a>
		<a href="http://www.sina.com.cn" οnclick="def();">两个都有</a>
	</body>
</html>
js代码:
var _event_list = {};
$(function(){
	// 找到页面上所有的a标签
	var links = $(document).find("a");
	// 循环数组,拿到每一个a标签
	for(var index in links) {
		// 保存click属性的值
		var _click = links.eq(index).attr("onclick");
		// 保存href属性的值
		var _href = links.eq(index).attr("href");
		if( _click != null) {
			// 给onclick属性重新设值
			links.eq(index).attr("onclick","eval_a_click_event('a"+index+"')");
		}
		if(_href != null) {
			// 给href属性重新设值
			links.eq(index).attr("href","javascript:eval_a_href_event('a"+index+"')");
		}
		_event_list["a"+index] = [links.eq(index),_href,_click];
	}
})

function eval_a_click_event(id) {
	var link = _event_list[id];
	if(link != null && link[2] != null) {
		// 拿到单击事件的方法
		alert(link[2]);
		// 执行单击事件
		eval(link[2]);
	}
}

function eval_a_href_event(id) {
	var link = _event_list[id];
	if(link != null && link[1] != null) {
		// 拿到href属性的值
		alert(link[1]);
		// 将href属性值重新赋回原来的值
		link[0].attr("href",link[1]);
		// 移除单击事件
		link[0].removeAttr("onclick");
		// 模拟单击事件
		link[0][0].click();
		// 重写href属性的值
		link[0].attr("href","javascript:eval_a_href_event('"+id+"')");
		// 如果有单击事件,重新加上
		if(link[2] != null) {
			link[0].attr("onclick",link[2]);
		}
	}
}

以上只是模拟a标签在本页面跳转到新页面。如果a标签的target属性被设置,则需要按照场景重新书写逻辑,大家根据我的代码举一反三吧。


如有错误,请及时指正,感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值