ネストされた UL と jqueryUI 選択可能を使用して、2 レベルの複数選択コントロールを構築しようとしています。
現在、選択を子レベルに制限していますが、私が本当に望んでいるのは、親 LI を選択し、そのすべての子 LI も選択できるようにすることです。さらに、すべての子 LI を選択し、その親を選択できるようにしたいと考えています。すべての子 LI が選択されていない場合、親は選択されません。
基本的なマークアップ:
<ul id="theParentList">
<li>Parent 1
<ul>
<li>Child 1.1</li>
<li>Child 1.2</li>
</ul>
</li>
<li>Parent 2
<ul>
<li>Child 2.1</li>
<li>Child 2.2</li>
</ul>
</li>
</ul>
そして現在のJavaScript:
$('#theParentList').selectable({filter: 'li li'});
最初の部分をどのように達成しますか: 親を選択すると、そのすべての子が選択されますか?
ありがとう!
更新:
この概念のほとんどが機能するようになりまし
た。親を選択すると、そのすべての子が選択されます。
子の選択を解除すると、その親の選択が解除されます
まだ機能していないこと: 親の子をすべて選択すると、親を選択する必要があります
この時点で私が持っているものは次のとおりです。
マークアップ:
<ul id="theParentList">
<li class="level-1">
<div>Parent 1</div>
<ul class="level-2">
<li><div>Child 1.1</div></li>
<li><div>Child 1.2</div></li>
</ul>
</li>
<li class="level-1"><div>Parent 2</div>
<ul class="level-2">
<li><div>Child 2.1</div></li>
<li><div>Child 2.2</div></li>
</ul>
</li>
</ul>
そしてjs:
function SelectSelectableElement (selectableContainer, elementsToSelect){
$(elementsToSelect).not(".ui-selected").addClass("ui-selecting");
}
function handleSelected (){};
function handleSelection (El){
if( $(El).parent().hasClass('level-1')){
var ch = $(El).parent().find('.level-2 .ui-selectee');
SelectSelectableElement('#theParentList', ch);
}else{
//this is a level-2 item
//if El and all of it's level-2 siblings are selected, then also select their level-1 parent
}
};
function handleUnselected (El){
if( $(El).parent().hasClass('level-1') ){
//unselect all of it's children
$(El).parent().children().each( function(){
$(this).find('.ui-selectee').removeClass('ui-selected').addClass('ui-unselected');
});
}else{
//this is a level-2 item, so we need to deselect its level-1 parent
$(El).parents('li.level-1').find(">:first-child").removeClass('ui-selected');
}
};
$('#theParentList').selectable({
filter: 'li div',
selecting: function(event, ui){
handleSelection(ui.selecting);
},
selected: function(event, ui) {
handleSelected(ui.selected);
},
unselected: function(event, ui) {
handleUnselected(ui.unselected);
}
});
ここにフィドルがあります:http://jsfiddle.net/JUvTD/