click()函数内部的jQuery .has()显示错误结果

时间:2019-05-20 10:20:39

标签: javascript jquery click

我想检测单击的元素(链接)中是否包含img。我的无效代码是:

$("a").click(function() {
  if ($( this ).has("img")) {
    console.log("link has image inside it");
  } else {
    console.log("no image");
  }
});

codepen example

如果单击文本链接,则.has()中将包含img。我在这里想念什么?

谢谢!

1 个答案:

答案 0 :(得分:4)

问题是因为has()用于过滤jQuery对象;它不返回布尔值。

要执行所需的操作,您需要使用find()children(),具体取决于您要检查img元素的深度,然后是length,像这样:

$("a").click(function(e) {
  e.preventDefault(); // only for testing

  if ($(this).find("img").length) {
    console.log("link has image inside it");
  } else {
    console.log("no image");
  }
});
img { max-width: 300px; }
a { display: block; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="https://google.com">
  <img src="https://upload.wikimedia.org/wikipedia/commons/3/3a/Cat03.jpg" alt="alt">
</a>

<a href="https://google.com">text link</a>