所以我想要实现的是一种方法,以检查元素的父母的href中是否有任何东西开始。这是我走了多远:
$('.element').click(function(e){
if($(this).is('[href^="X"')){
// How to check if the clicked element's href begins with X
}
});
但这不是我想要的。我想检查一下这个元素的父母是否有一个href开头的东西。
有什么想法吗?
古斯塔夫
答案 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>
元素与href
以x
开头,则评估将返回true,即使它不是祖先元素。我认为这是一个功能 - 在写出选择器时 - 但我忘了在答案中详细说明。
如果这被视为错误,那么使用parents('a[href^=x]')
代替closest('a[href^=x]')
的选项将更适合您的用例。
参考文献:
答案 1 :(得分:1)
$(".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;
答案 2 :(得分:0)
这就是你想要的:
$('.element').click(function(e){
var $parents=$(this).parents();
var matches=$parents.filter('[href^="x"]');
if(matches.length){
}
}
});