【发布时间】:2013-10-17 16:33:42
【问题描述】:
我正在尝试使用 keyup 文本输入过滤特定 LI 的 UL。问题是,LI 嵌套在树中,过滤器只能看到最顶部的 LI,并且似乎没有正确过滤。输入宾夕法尼亚州应该只显示宾夕法尼亚州,上面什么都没有。有任何想法吗?提前致谢。
http://www.jsfiddle.net/CDAVZ/412
HTML
<input type='text' value='[Enter search term followed by Return]' class='allW treeSearch' />
<ul id="treeview">
<li data-expanded="true"><span class="icon-location-7 md-moon delBlue treeSpace" data-icon=""></span>
<span class="icon-location-7 md-moon white treeSpace" data-icon=""></span>Root
<ul>
<li data-expanded="true"><span class="icon-stack-6 md-moon delLtBlue treeSpace" data-icon=""></span>
<span class="icon-stack-6 md-moon white treeSpace" data-icon=""></span>Gas Model
<ul>
<li data-expanded="true"><span class="glyphicon glyphicon-globe md-moon delGreen treeSpace"></span>
<span class="glyphicon glyphicon-globe md-moon white treeSpace"></span>United States
<ul>
<li data-expanded="true"><span class="icon-pie md-moon delBlue treeSpace" data-icon=""></span>
<span class="icon-pie md-moon white treeSpace" data-icon=""></span>Pennsylvania
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
jQuery
$('.treeSearch').click(function(){
$(this).val('');
});
$('.treeSearch').keyup(function(){
var searchText = $(this).val();
$('#treeview ul').each(function(){
var currentLiText = $(this).text(),
showCurrentLi = currentLiText.indexOf(searchText) !== -1;
$(this).toggle(showCurrentLi);
});
});
【问题讨论】:
-
当你隐藏一个元素时,你隐藏了它的所有子元素。你不能隐藏 'United States' 并且 not 隐藏 'Pennsylvania',CSS 不允许这样做。为了解决您的问题,您必须在页面上方和此处提供的内容之外创建和修改其他标记。
-
你可以使用 CSS 可见性 http://stackoverflow.com/a/12956970/2359055 类似 http://jsfiddle.net/HLWMv/1/
-
@AbrahamUribe,这是个好主意。也将其发布为答案。
-
@Sergio 呢jsfiddle.net/arunpjohny/gcYpD/6
-
@triplethreat77 结帐jsfiddle.net/arunpjohny/gcYpD/6
标签: javascript jquery filter nested html-lists