我有一个全局功能来捕获点击次数。
$(document).click(function(e){
//do something
if(clickedOnLink)
//do something
});
当目标是一个链接时,我想做更多的事情,但如果<a>
标签实际上围绕一个div(因为HTML5允许这个),目标将是该div。
答案 0 :(得分:28)
您可以尝试查看您点击的元素是否是<a>
代码的子代。
$(document).click(function(e){
if($(e.target).closest('a').length){
alert('You clicked a link');
}
else{
alert('You did not click a link');
}
});
答案 1 :(得分:16)
我认为使用is
实际上会比建议closest
的答案有更好的表现:
$(e.target).is('a, a *');
检查元素本身是a
还是包含a
。
这应该比closest
快,因为它会在元素本身上使用matches而不需要像closest
那样遍历DOM树。
答案 2 :(得分:5)
试试这个
$(document).click(function(e){
//do something
if($(this).closest('a').length)
//do something
});
答案 3 :(得分:1)
使用jquery只需获取tagName属性 $( “a”)的丙( “变量名”);
答案 4 :(得分:1)
如果确切的目标是链接,那么您可以使用.is()
示例:
$(".element").on("click", function(e){
if($(e.target).is("a")){
//do your stuff
}
});
修改强>
如果它被锚标记内的其他元素包围,那么您可以使用closest()
并使用length
示例:
$(".element").on("click", function(e){
if($(e.target).closest("a").length){
//do your stuff
}
});
答案 5 :(得分:0)
更新: 您可以检查目标是a还是父项是a。
$(function () {
$(document).on('click', function (e) {
$target = $(e.target);
if ($target.closest('a').length > 0) {
alert('i am an a');
}
});
});
答案 6 :(得分:0)
您可以通过测试.children()
<div>
是否包含任何内容来测试<a>
下是否有<div>
。如果内部没有任何内容,或者没有<div>
,则if
语句将返回false
。
我建议使用此代码:
$(document).click(function(e){
var willRedirect = ($('a[href="/"]').attr('href').indexOf('#') == -1 ? true : false),
//run code
if ( willRedirect === false ){
e.preventDefault();
//the link will not redirect
if ( $(this).children('div').html() ){
//there is a <div> inside <a> containing something
}
else {
//there is no <div> inside <a>
}
}
else {
//the link is not pointing to your site
}
});