javascript - 在 jQuery UI 中启用 Shift-Multiselect 可选择 div 元素

标签 javascript jquery jquery-ui

我在这里找到了选择带有 ui 可选元素的多个答案,但它们都没有帮助我选择多个 div 而不是 li,所以任何人都可以帮助我。我想要的只是使用 Shift 键事件选择行中的多个 div。 提前感谢您的评论和答复

最佳答案

它与 Ctrl 或 META 键配合使用。

On Macintosh keyboards, the META key maps to the Command key (⌘).

On Windows keyboards, the META key maps to the Windows key.

jQuery UI Selectable 几乎适用于任何适当的结构。如果你想使用<div>你可以,你只需要一个 wrapper 和 child 。

$(function() {
  $("#selectable").selectable();
});
#feedback {
  font-size: 1.4em;
}

#selectable .ui-selecting {
  background: #FECA40;
}

#selectable .ui-selected {
  background: #F39814;
  color: white;
}

#selectable {
  list-style-type: none;
  margin: 0;
  padding: 0;
  width: 60%;
}

#selectable div {
  margin: 3px;
  padding: 0.4em;
  font-size: 1.4em;
  height: 18px;
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div id="selectable">
  <div class="ui-widget-content">Item 1</div>
  <div class="ui-widget-content">Item 2</div>
  <div class="ui-widget-content">Item 3</div>
  <div class="ui-widget-content">Item 4</div>
  <div class="ui-widget-content">Item 5</div>
  <div class="ui-widget-content">Item 6</div>
  <div class="ui-widget-content">Item 7</div>
</div>

如果您想允许特定项目,请使用 filter选项。

filter

Type: Selector

Default: "*"

The matching child elements will be made selectees (able to be selected).

如果您检查代码,您将在 _mouseStart 中看到这一点。 ,它是专门为查找 Ctrl 或 Meta 键而编写的:

if ( !event.metaKey && !event.ctrlKey ) {

如果您确实想要使用 Shift 键,则可以使用 Widget Factory ( $.widget() ) 克隆可选择项并重写 _mouseStart函数还可以对 !event.shiftKey 进行异常(exception)处理也是如此。

$(function() {
  $.widget("custom.shiftSelect", $.ui.selectable, {
    _mouseStart: function(event) {
      var that = this,
        options = this.options;

      this.opos = [event.pageX, event.pageY];
      this.elementPos = $(this.element[0]).offset();

      if (this.options.disabled) {
        return;
      }

      this.selectees = $(options.filter, this.element[0]);

      this._trigger("start", event);

      $(options.appendTo).append(this.helper);

      // position helper (lasso)
      this.helper.css({
        "left": event.pageX,
        "top": event.pageY,
        "width": 0,
        "height": 0
      });

      if (options.autoRefresh) {
        this.refresh();
      }

      this.selectees.filter(".ui-selected").each(function() {
        var selectee = $.data(this, "selectable-item");
        selectee.startselected = true;
        if (!event.metaKey && !event.ctrlKey && !event.shiftKey) {
          that._removeClass(selectee.$element, "ui-selected");
          selectee.selected = false;
          that._addClass(selectee.$element, "ui-unselecting");
          selectee.unselecting = true;

          // selectable UNSELECTING callback
          that._trigger("unselecting", event, {
            unselecting: selectee.element
          });
        }
      });

      $(event.target).parents().addBack().each(function() {
        var doSelect,
          selectee = $.data(this, "selectable-item");
        if (selectee) {
          doSelect = (!event.metaKey && !event.ctrlKey) ||
            !selectee.$element.hasClass("ui-selected");
          that._removeClass(selectee.$element, doSelect ? "ui-unselecting" : "ui-selected")
            ._addClass(selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting");
          selectee.unselecting = !doSelect;
          selectee.selecting = doSelect;
          selectee.selected = doSelect;

          // selectable (UN)SELECTING callback
          if (doSelect) {
            that._trigger("selecting", event, {
              selecting: selectee.element
            });
          } else {
            that._trigger("unselecting", event, {
              unselecting: selectee.element
            });
          }
          return false;
        }
      });

    }
  });
  
  $("#selectable").shiftSelect();
});
#feedback {
  font-size: 1.4em;
}

#selectable .ui-selecting {
  background: #FECA40;
}

#selectable .ui-selected {
  background: #F39814;
  color: white;
}

#selectable {
  list-style-type: none;
  margin: 0;
  padding: 0;
  width: 60%;
}

#selectable div {
  margin: 3px;
  padding: 0.4em;
  font-size: 1.4em;
  height: 18px;
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div id="selectable">
  <div class="ui-widget-content">Item 1</div>
  <div class="ui-widget-content">Item 2</div>
  <div class="ui-widget-content">Item 3</div>
  <div class="ui-widget-content">Item 4</div>
  <div class="ui-widget-content">Item 5</div>
  <div class="ui-widget-content">Item 6</div>
  <div class="ui-widget-content">Item 7</div>
</div>

希望有帮助。

关于javascript - 在 jQuery UI 中启用 Shift-Multiselect 可选择 div 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54585638/

相关文章:

javascript - 如何正确使用多个初始化函数?

javascript - 在从 sibling 中删除类(class)时切换类(class)

javascript - 提交表单时等待消息

jquery-ui - 为什么 jQuery UI 对话框没有最小化、最大化按钮?

javascript - 如何从 Google map 迁移到 TomTom

javascript - 如何检查某些类是否具有背景颜色,如果有则更改背景颜色

javascript - Bootstrap carousel-control 正在获取图像

javascript - 使用 JavaScript 在输入字段中写入字符时自动建议

javascript - fullcalendar 为事件上放置的可点击图标解除绑定(bind) eventClick 方法

javascript - JQuery 在鼠标单击时显示和隐藏 div(动画)