У меня есть следующий код.
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
</head>
<div id="hello">Hello <div>Child-Of-Hello</div></div>
<br />
<div id="goodbye">Goodbye <div>Child-Of-Goodbye</div></div>
<script type="text/javascript">
<!--
function fun(evt) {
var target = $(evt.target);
if ($('div#hello').parents(target).length) {
alert('Your clicked element is having div#hello as parent');
}
}
$(document).bind('click', fun);
-->
</script>
</html>
Я ожидаю, что только при Child-Of-Hello
нажатии $('div#hello').parents(target).length
вернет> 0.
Однако это происходит всякий раз, когда я нажимаю где-нибудь.
Что-то не так с моим кодом?
javascript
jquery
Чеок Ян Ченг
источник
источник
.has()
похоже, предназначен для этой цели. Поскольку он возвращает объект jQuery, вам также необходимо проверить.length
:источник
target
находится ли он внутри него.Ванильный однострочник для IE8 +:
Вот как это работает:
источник
Если у вас есть элемент, у которого нет определенного селектора, и вы все еще хотите проверить, является ли он потомком другого элемента, вы можете использовать jQuery.contains ()
Вы можете передать родительский элемент и элемент, который вы хотите проверить, этой функции, и она вернется, если последний является потомком первого.
источник
$.contains
использование элементов DOM, а не экземпляров jQuery, иначе он всегда будет возвращать false.$.contains
никогда не возвращает истину, если два аргумента являются одним и тем же элементом. Если вы этого хотите, используйтеdomElement.contains(domElement)
.Вместо этого мы использовали .closest ().
источник
Вы можете заставить свой код работать, просто поменяв местами два термина:
У вас неправильный путь к ребенку и родителю.
источник
var target = $(evt.target);
так что ваш код должен читаться,if (target.parents('div#hello').length) {
а не...$(target)...
В дополнение к другим ответам вы можете использовать этот менее известный метод для захвата элементов определенного родителя, например, так,
В вашем случае это было бы
Обратите внимание на использование запятых между дочерним и родительским элементом и их отдельные кавычки. Если бы они были окружены одинаковыми кавычками
у вас будет объект, содержащий оба объекта, независимо от того, существуют ли они в их деревьях документов.
источник