jquery - 选择一个 div,如果您单击该 div,或者一个子元素
问题描述
当我使用 . 单击子元素时,我试图选择一个父类event.target
。我div
通过查看它有什么类来检查它是否是 ,如果它不是div
,我div
会从子元素中找到它,但它似乎不起作用,而且它不会hide()
。
$(document).click(function(e){
elem_id = $('#'+e.target.id);
if(!elem_id.hasClass('mail_schedule_dropdown')) elem_id = $('#'+e.target.id).find('.mail_schedule_dropdown');
elem_id.hide();
});
<div id="parent" class="mail_schedule_dropdown"><span>child</span></div>
如果单击,如何选择父元素div
?这不起作用:
elem_id = $('#'+e.target.id).find('.mail_schedule_dropdown');
为什么那行不通?
解决方案
你只是在寻找错误的方向。来自jQuery 文档.find()
:
获取当前匹配元素集中每个元素的后代,由选择器、jQuery 对象或元素过滤。
在您的代码中,如果单击的元素没有您的类,则您正在搜索其后代以查找父级。但实际上在那种情况下它必须是被点击的孩子,所以你需要搜索它的祖先。
有几种方法可以做到这一点,但.closest()
可能是最合适的:
elem_id = $('#'+e.target.id).closest('.mail_schedule_dropdown');
边注
代码中的变量名让我有点吃惊。 elem_id
根本不是 ID,它是代表元素的实际 jQuery 对象。这似乎微不足道,但是当将 ID 用作字符串、元素和选择器时,一旦你的代码变得更复杂,就足以导致错误 - 至少它发生在我身上!这是我为清晰度而调整的版本:
$(document).click(function(e){
// Using '$' makes it clear that this represents a jQuery object;
// The variable name makes it clear exactly what it is
var $clicked = $('#'+e.target.id);
if (!$clicked.hasClass('mail_schedule_dropdown')) {
$clicked = $clicked.find('.mail_schedule_dropdown');
}
$clicked.hide();
});
推荐阅读
- git - 使用 git rebase interactive 来编排一系列 git cherry-pick?
- python - 计算以递增顺序排列所需的序列中的反转次数
- wordpress - 通过插件将 wordpress 小部件设置为侧边栏
- react-native - 为什么 EXPO 独立应用程序显示 url_invalid?
- google-cloud-platform - 我们可以将值传递给正在运行的 GCP Cloud Composer 管道吗?
- data-structures - 这个平衡 BST 的复杂性是什么?
- html - 导航栏中的图标需要修复
- javascript - 角度无法从会话存储中获取用户数据
- types - 如何在 Python 中使用静态类型参数
- html - 我将如何复制此图片中的展示位置?