jQuery,如果任何元素的父亲的href开头

时间:2015-05-30 14:47:16

标签: javascript jquery html

所以我想要实现的是一种方法,以检查元素的父母的href中是否有任何东西开始。这是我走了多远:

$('.element').click(function(e){
    if($(this).is('[href^="X"')){
        // How to check if the clicked element's href begins with X
    }
});

但这不是我想要的。我想检查一下这个元素的父母是否有一个href开头的东西。

有什么想法吗?

古斯塔夫

3 个答案:

答案 0 :(得分:2)

我建议,鉴于嵌套<a>元素无效,因此显然只能有一个祖先<a>元素(或没有祖先<a>元素):

$('.element').click(function(e){
    // here we use a terribly-, but meaningfully-, named variable
    // to hold the Boolean result of the assessment;
    // the assessment looks from the clicked element up through
    // the ancestors for the first <a> element matching the
    // attribute-starts-with selector ([href^=x])
    // this will return either 1 or 0 elements.
    // we check the length; if it's equal to 1 then the ancestor
    // has an href starting with x, if it's 0 then there is either
    // no ancestor <a> element or no ancestor <a> element with a
    // href matching the attribute-starts-with selector:
    var ancestorAnchorStartsWithX = $(this).closest('a[href^=x]').length === 1;
});

值得注意的是,@A. Wolff did在下面的评论中指出:

  

... closest() [也检查]元素本身。

这意味着如果单击的元素本身与提供给最接近的选择器匹配(因此<a>元素与hrefx开头,则评估将返回true,即使它不是祖先元素。我认为这是一个功能 - 在写出选择器时 - 但我忘了在答案中详细说明。

如果这被视为错误,那么使用parents('a[href^=x]')代替closest('a[href^=x]')的选项将更适合您的用例。

参考文献:

答案 1 :(得分:1)

&#13;
&#13;
$(".element").click(function(e) {
  var res = $(this).parents("[href^=X]").is("*");
  console.log(res);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>

<a href="Xabc123">
  <div class="element">click</div>
  </a>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

这就是你想要的:

$('.element').click(function(e){
      var $parents=$(this).parents();
      var matches=$parents.filter('[href^="x"]');
      if(matches.length){
      }

    }
});