jQuery检查目标是否是链接

时间:2013-01-14 21:57:09

标签: javascript click

我有一个全局功能来捕获点击次数。

$(document).click(function(e){
  //do something
  if(clickedOnLink)
    //do something
});

当目标是一个链接时,我想做更多的事情,但如果<a>标签实际上围绕一个div(因为HTML5允许这个),目标将是该div。

http://jsfiddle.net/Af37v/

7 个答案:

答案 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');
        }
    });
});

http://jsfiddle.net/8jeGV/4/

答案 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
    }
});