所以我有一个相当基本的javascript问题,我已经把我的头撞到墙上一段时间了:
<div class='alist'>
<ul>
<li class='group_1'> An Item </li>
<li class='group_1'> An Item </li>
<li class='group_2'> An Item </li>
</ul>
</div>
<div class='alist'>
<ul>
<li class='group_1'> An Item </li>
<li class='group_1'> An Item </li>
<li class='group_2'> An Item </li>
</ul>
</div>
<script>
function toggle_item( num ){
$$( 'li.group_' + num ).invoke('toggle');
}
</script>
基本上,我需要创建一个清除器来设置要显示的div:如果所有li都显示为none:none。
我认为它会像:
function sweep(){
$$('div.alist').each( function( s ) {
ar = s.down().children
});
}
欢迎任何有关优秀教程的建议
答案 0 :(得分:2)
这样的事可能会让你开始。您需要遍历子项并检查它们是否可见。如果它们中没有任何一个,则设置一个标志并从循环中断开。如果该标志为false,则您不需要隐藏div
。
function sweep(){
$$('div.alist').each( function( s ) {
var shouldHide = true;
var children = s.down().childElements();
children.each(function(li) {
if(li.visible()) {
shouldHide = false;
throw $break;
}
});
if(shouldHide) {
s.hide();
}
});
}
答案 1 :(得分:1)
您可以使用Element
的{{3}}方法查找所有li
个后代。并为每个li
运行方法select()并检查是否所有返回true。如果全部返回true,则隐藏div。
function sweep() {
// check each div
$$('div.alist').each(function(element) {
var listItems = element.select('li');
// are the list items of this div hidden?
var listItemsHidden = listItems.all(function(item) {
return item.visible();
});
// hide the div too if so
if(listIemsHidden) {
element.hide();
}
});
}
此代码未经测试。
答案 2 :(得分:0)
这是jQuery解决方案(Prototype必须类似):
$('div.alist').css('display', function () {
return $(this).find('li:visible').length < 1 ? 'none' : '';
});