Jquery 如果嵌套div包含锚点,则可单击div

Jquery 如果嵌套div包含锚点,则可单击div,jquery,Jquery,在使用现有示例时: $(".card").click(function() { window.location = $(this).find("a").attr("href"); return false; }); 这适用于“卡”的所有实例,但是我有几张没有锚的卡,这显然是一个问题 我只希望在div类的“card footer”中有一个锚点时才进行导航 到目前为止,我已经拼凑了: $(".features

在使用现有示例时:

$(".card").click(function() {
    window.location = $(this).find("a").attr("href"); 
    return false;
});
这适用于“卡”的所有实例,但是我有几张没有锚的卡,这显然是一个问题

我只希望在div类的“card footer”中有一个锚点时才进行导航

到目前为止,我已经拼凑了:

$(".features .card").click(function() {
    if ( $(this:has("a.card-footer")) ) {
        window.location = $(this).find("a.card-footer").attr("href");
        return false;
    }
});
这将它的作用域限定到我需要此事件的卡上,但是我还没有找到一个组合:has/.find()/.children()实际起作用

必须首先检查它,因为我的功能中有没有链接的卡片页脚,所以这是为了防止“未定义”

多谢各位

编辑:拼写

编辑以修复语法,谢谢: 这仍然会拾取页脚没有锚的卡,导致未定义的:/

编辑HTML示例:

您可以使用
jquery
中的
has()
函数:

将匹配的元素集减少为具有与选择器或DOM元素匹配的后代的元素集

您不必检查
if
语句。只有当
具有
锚定
元素时,
点击事件
才会执行

$('.features .card').has('.card-footer > a').click(function() {
   window.location = $(this).find('.card-footer > a').attr('href');
});
您可以在
jquery
中使用
has()
函数:

将匹配的元素集减少为具有与选择器或DOM元素匹配的后代的元素集

您不必检查
if
语句。只有当
具有
锚定
元素时,
点击事件
才会执行

$('.features .card').has('.card-footer > a').click(function() {
   window.location = $(this).find('.card-footer > a').attr('href');
});

您的选择器是
a.card-footer
。这意味着“一个
a
元素和
卡片页脚
类”。根据您的HTML结构,您真正想要的是“拥有一个具有
a
子代的card footer类的元素”


您的选择器是
a.card-footer
。这意味着“一个
a
元素和
卡片页脚
类”。根据您的HTML结构,您真正想要的是“拥有一个具有
a
子代的card footer类的元素”

这很有效 谢谢Onyx和Jacob这很有效
感谢Onyx和Jacob

您的HTML是否与我们假设的有所不同?对我来说似乎还可以:啊,是的,我在上面贴了一个JSFIDLE。。。也许我对a.card-footer有误解,它是一个div,类card-footer包含一个锚。谢谢你的HTML和我们想象的不一样吗?对我来说似乎还可以:啊,是的,我在上面贴了一个JSFIDLE。。。也许我对a.card-footer有误解,它是一个div,类card-footer包含一个锚。感谢使用console.log('true')实现此功能:我试图在上面发布一个简化的HTML示例,但没有任何效果,不过这是一个标准的bootstrap 4.1卡,其部分包装器被归类为“功能”。添加了一个jsfiddleabove@ironchefbadass,对不起,你的描述有点误导。我在HTML代码片段之后更新了答案。因此,使用console.log('true')不会呈现任何内容:/我试图发布一个简化的HTML示例,但没有任何效果,不过这是一个标准的bootstrap 4.1卡,其部分包装器被归类为“功能”。添加了一个jsfiddleabove@ironchefbadass,对不起,你的描述有点误导。我在HTML代码片段之后更新了答案。我刚刚弄明白了,将此标记为答案。谢谢你们两位。我刚刚想好了,把这个作为答案。谢谢你们两位。
$('.features .card').has('.card-footer a').click(function() {
  window.location = $(this).find('.card-footer a').attr('href');
});
$('.features .card').has('.card-footer a').click(function() {
      console.log('true');
      window.location = $(this).find('.card-footer a').attr('href');
});