如何在Javascript/ css中选择嵌套ul中的最低级别ul
How to select lowest level ul in nested ul in Javascript/ css
我觉得这是一个简单的问题,我搜索了相当多,但我不能拿出一个很好的答案。
我有一堆嵌套的UL,我已经追加到一个div。我希望能够折叠我点击的UL。问题是,当您单击另一个UL中的一个UL时,您实际上同时单击了两个UL。因此,如果我点击最低层折叠,然后输入$(this).css('height', '5px')最高层的UL也得到了5px的高度。希望代码能让我的问题更清楚。
<ul class=t0>
<li class='item'>Top Item 1</li>
<li class='item'>Top Item 2</li>
<li class='item'>Top Item 3 is a list</li>
<ul class=t1>
<ul class=t2>
<li class='item'>some <span class='val'>Thing</span></li>
<li class='item'>something <span class='val'>else</span></li>
</ul>
<ul class=t2>
<li class='item'>method : <span class='val'>GET</span></li>
<li class='item'>uri : <span class='val'>/status</span></li>
</ul>
</ul>
<li class='item'>Top Item 3 is a list</li>
</ul>
如果你点击UL类t2,只有t2会坍缩,但如果你点击t1,两个t2都会坍缩。我知道如何改变css和一切,我只是有麻烦,只选择ul点击。我想我可以用。find或。nearest,我只是不确定具体怎么做。
提前感谢您的帮助。
$('.t1, .t2').click(function(e){
e.stopPropagation(); //prevent the event from bubbling up
$(this).slideUp();
});
这将工作-然而,你的想法/标记/执行是有缺陷的。没有.t1
可以点击,因为它是由两个.t2
组成的-因此,如果不点击.t2
,点击.t1
是不可能的
你的HTML也是无效的,因为<ul class='t1'>
不能有另一个<ul>
作为它的孩子。这里需要一些<li>
您可以使用event。stopPropagation以防止事件上升到更高的级别。http://api.jquery.com/event.stopPropagation/
你可以委托并使用e.target
来确定被点击的内容,并找到它的$.closest()
祖先UL
:
标记(更新)
<ul class=t0>
<li class='item'>Top Item 1</li>
<li class='item'>Top Item 2</li>
<li class='item'>Top Item 3 is a list
<ul class=t2>
<li class='item'>some <span class='val'>Thing</span></li>
<li class='item'>something <span class='val'>else</span></li>
</ul>
<ul class=t2>
<li class='item'>method : <span class='val'>GET</span></li>
<li class='item'>uri : <span class='val'>/status</span></li>
</ul>
</li>
<li class='item'>Top Item 3 is a list</li>
</ul>
jQuery $('.t0').on('click', function click(e) {
$(e.target).closest('ul').slideUp();
});
http://jsfiddle.net/userdude/ksVUY/EDIT:或者这是你想要的?问题是<ul><ul>
,这是无效的标记,所以它取决于你对标记的特定部分所做的事情。
要回答这个问题(这似乎不是真正想要的,但其他人可能会遇到这个问题并寻找答案),要找到"最低"的UL,您可以使用getElementsByTagName,它以DOM顺序返回一个集合,并返回集合中的最后一个元素(如果有一个):
function getLowestUL(el) {
var uls = el.getElementsByTagName('ul');
return uls.length? uls[uls.length - 1] : null;
}
如果提供的元素是UL,如果它是最低的UL,则返回该元素,则:
function getLowestUL(el) {
var isUL = el.tagName && el.tagName.toLowerCase() == 'ul';
var uls = (el.nodeType == 1) && el.getElementsByTagName('ul');
return (uls && uls.length)? uls[uls.length - 1] : isUL? el : null;
}
- jQuery对嵌套在<李>并且<a>元素,同时离开父<ul>打开
- JSON 嵌套 Ul 来自 Javascript 中的单维或多维 json 对象
- Javascript 从嵌套的 UL LI 复选框生成递归 JSON 对象
- .slideup()删除整个ul,而不仅仅是嵌套的li
- 嵌套UL高度
- 需要根据嵌套ul的数量更改下拉菜单的宽度
- 如何在 JavaScript 中选择没有类的嵌套 UL 元素
- AngularJS嵌套ul列表和ng-repeat
- 将数组对象转换为嵌套的 ul li 元素
- Jquery UI 嵌套了具有多个 UL 的 Sortables
- 嵌套列表-在单独的一行上显示每个ul级别
- 如何获得<李>在嵌套<ul>
- 如何添加嵌套的ul和li
- 在嵌套的ul上使用knockoutjs数据绑定
- JavaScript:创建嵌套UL的递归函数
- querySelectorAll不适用于嵌套的UL
- 如何禁用嵌套ul中的所有链接,除了最低级别的链接
- 如何创建嵌套的li-ul-li元素
- 查找ul's的嵌套顺序并添加特定的类
- 根据在其中单击的链接查找嵌套的ul是哪个子元素