jQuery用户界面可选择多个级别

jQuery用户界面可选择多个级别,jquery,jquery-ui,jquery-ui-selectable,Jquery,Jquery Ui,Jquery Ui Selectable,我希望有多个级别的选择,但是选择函数首先触发父级,而不是子级,有时甚至不注册子级。我想做一些类似的事情: <ul> <li>Level 1a <ul> <li>Level 2a</li> <li>Level 2b</li> </ul> </li> <li>Level 1b <ul> <li

我希望有多个级别的选择,但是选择函数首先触发父级,而不是子级,有时甚至不注册子级。我想做一些类似的事情:

<ul>
  <li>Level 1a
    <ul>
      <li>Level 2a</li>
      <li>Level 2b</li>
    </ul>
  </li>
  <li>Level 1b
    <ul>
      <li>Level 2c</li>
      <li>Level 2d</li>
    </ul>
  </li>
</ul>
  • 1a级
    • 2a级
    • 2b级
  • 1b级
    • 2c级
    • 2d级

关于如何注册2级物品的点击有什么想法吗?我希望覆盖它,以便在选择级别2时,它取消选择父级,并仅显示高亮显示的级别2

您希望使子项
ul
可选择,而不是父项。使用当前示例,执行以下操作:

$(function() {
    $('ul').children('li').children('ul').selectable();
 });

演示:

我能想到的唯一解决方案是使用无效的标记,关闭次无序列表之前的列表项,如:

<ul>
  <li>Level 1a</li>
    <ul>
      <li>Level 2a</li>
      <li>Level 2b</li>
    </ul>
  </li>
  <li>Level 1b</li>
    <ul>
      <li>Level 2c</li>
      <li>Level 2d</li>
    </ul>
  </li>
</ul>

这样做的目的是使除子组1之外的任何div都成为选择器。然后,我添加了一个新类click selected,因为我希望能够在保留现有选择的同时打开和关闭选择。我希望在所有子项都被选中时选择第一个级别,如果没有选中,则取消选择第一个级别,并让第一个级别打开和关闭所有子项

您是否只希望级别2的项目可以选择?不,我希望所有级别都可以选择。谢谢你看马特。不幸的是,这只会让第二个级别可选,而不是所有级别。
<div class="selectable">
  <div id="level1">Level 1</div>
  <div class="subgroup level1">
    <div id="level1a">Level 1a</div>
    <div id="level1b">Level 1b</div>
  </div>
  <div id="level2">Level 2</div>
  <div class="subgroup level2">
    <div id="level2a">Level 2a</div>
    <div id="level2b">Level 2b</div>
  </div>
</div>
$('.selectable').selectable({
  selected: function (event, ui) {
    if ($(ui.selected).hasClass('click-selected')) {
      $(ui.selected).removeClass('click-selected');
      $('.'+ui.selected.id).removeClass('click-selected');
      $('.'+ui.selected.id+' div').removeClass('click-selected');
    } else {
      $(ui.selected).addClass('click-selected');
      $('.'+ui.selected.id).addClass('click-selected');
      if ($(ui.selected).parent('.subgroup').length) {
        $(ui.selected).parent('.subgroup').removeClass('click-selected');
        var cNames = $(ui.selected).parent('.subgroup').attr('class').replace("subgroup","").split(" ");
        $.each(cNames, function(i,c){
          if ($(ui.selected).parent('.subgroup').children().length == $(ui.selected).parent('.subgroup').children('.click-selected').length) {
            $('#'+c).addClass('click-selected');
          } else {
            $('#'+c).removeClass('click-selected');
          }
        });
      }
    }
  },
  filter: "div:not(.subgroup)"
});