jquery - Get class attribute using closest /prev/ filter
问题描述
How can i get class attribute of <i>
element when i click on <a>
Subcategory elements ?
I have tried :
$(el).filter("i").attr("class")
$(el).closest("i").attr("class")
<ul class="dropdown">
<li class="dropdown-submenu">
<i class="fas fa-tools color-1 text-center mr-1"></i>
<a href="#!" class="list-group-item">Category A</a>
<ul class="dropdown">
<li>
<a href="#!" class="list-group-item">Subcategory1</a>
</li>
<li>
<a href="#!" class="list-group-item">Subcategory2</a>
</li>
<li>
<a href="#!" class="list-group-item">Subcategory3</a>
</li>
</ul>
</li>
</ul>
解决方案
该.filter()
方法根据提供的选择器限制当前集合。没有i
元素是元素的兄弟a
元素。
将匹配元素集减少为匹配选择器或通过函数测试的元素。
该.closest()
方法根据提供的选择器搜索元素的祖先。唯一的i
元素不是任何a
元素的祖先。但是,您可以向上遍历元素的父/祖先,i
然后按照@FelixKling 的建议向下遍历:
$('a').on('click', function() {
console.log( $(this).closest("li[class]").find("i[class]").attr("class") );
});
演示
$('a').on('click', function() {
//$(this).filter("i").attr("class")
console.log( $(this).closest("li[class]").find("i[class]").attr("class") );
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="dropdown">
<li class="dropdown-submenu">
<i class="fas fa-tools color-1 text-center mr-1"></i>
<a href="#!" class="list-group-item">Category A</a>
<ul class="dropdown">
<li>
<a href="#!" class="list-group-item">Subcategory1</a>
</li>
<li>
<a href="#!" class="list-group-item">Subcategory2</a>
</li>
<li>
<a href="#!" class="list-group-item">Subcategory3</a>
</li>
</ul>
</li>
</ul>
推荐阅读
- python - 为什么在带有字符串和 NaN 的系列上会出现“TypeError:'float' 类型的参数不可迭代”?
- php - 如何在用户输入 laravel 8 时进行验证更新?
- javascript - 为什么我的代码没有得到热图?
- java - 多线程不会加速 Java 中的进程
- c - C从文件中读取格式化文本
- php - Docker LeanTime:不使用 nginx 代理设置提供 css js 图像文件
- react-native - react native 避免使用键盘,但将标题固定在屏幕上
- java - Guice:注入是否需要绑定或接口?我们需要获取注入器的实例吗?
- sql - 在 PostgreSQL 中使用“创建规则/触发器”实现 SCD2
- javascript - 如何通过 ctrl 复制事件,在 FullCalendar v5 中拖放 - 仅限纯 JavaScript