每当用户点击未在新窗口中打开且具有a
属性的任何href
时,我想调用自定义函数(或只是执行某些逻辑) 非空且不以#
开头且没有javascript:
。
基本上我需要所有那些链接,如果点击将导致当前页面被卸载。但是应排除所有其他链接,例如#point1
或javascript:alert('');
等(因为如果点击,用户仍将保留在页面上)。什么是适当的jQuery?
理想情况下应与旧版jQuery兼容 - 版本1.7.2
答案 0 :(得分:3)
试试这个:
$(document).on('click', 'a[href][href!=""]:not([href^="#"],[href^="javascript:"],[target="_blank"])', function() {
// do something
})
但是,你必须考虑到它不是一个非常易读的代码来维护。传递过滤函数(如@Rory McCrossan答案)可以更具可读性。
请参阅Fiddle
P.S您是否考虑过使用beforeunload事件?
答案 1 :(得分:2)
由于这是一套非常复杂的规则,您可以使用filter()
:
$('a').filter(function() {
var href = $(this).attr('href');
return href != '' && href != '#someanchor' && this.target != '_blank';
}).click(function() {
// do your thing here...
});
答案 2 :(得分:0)
您可以使用jQuery的.not()
方法。请参阅:http://api.jquery.com/not/
$('a')
.not('[target=_blank]')
.not('[href=""]')
.not('[href=#someanchor]')
.on('click', function() {
//code here
});