繁体   English   中英

jQuery检查目标是否是链接

[英]jQuery check if target is link

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

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

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

http://jsfiddle.net/Af37v/

您可以尝试查看您单击的元素是否是<a>标记的子元素。

$(document).click(function(e){
    if($(e.target).closest('a').length){
        alert('You clicked a link');
    }
    else{
        alert('You did not click a link');
    }
});

我认为使用is实际上会比closest的答案具有更好的性能:

$(e.target).is('a, a *');

这将检查元素本身是否为a或者是否包含a

这应该比closest更快,因为它将使用元素本身的匹配 ,而不需要像closest那样遍历DOM树。

尝试这个

$(document).click(function(e){
  //do something
  if($(this).closest('a').length)
    //do something
});

使用jquery只需获取tagName属性$(“a”)。prop(“tagName”);

如果确切的目标是链接,那么你可以使用.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
  }
});

更新:您可以检查目标是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/

您可以通过测试.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
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM