jQuery .has () внутри функции click (), показывая ложный результат - PullRequest
1 голос
/ 20 мая 2019

Я хочу определить, есть ли в нем нажатый элемент (ссылка). Мой нерабочий код:

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

пример кода

Если вы нажмете на текстовую ссылку, у нее есть .has () то, что внутри нее. Что мне здесь не хватает?

Спасибо!

1 Ответ

4 голосов
/ 20 мая 2019

Проблема заключается в том, что 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>
...