当前位置:首页 > JavaScript

js实现选集

2026-04-06 08:26:30JavaScript

实现基本的选集功能

使用JavaScript实现选集功能通常涉及DOM操作和事件监听。以下是一个简单的实现示例,允许用户通过点击选择多个元素:

document.addEventListener('DOMContentLoaded', function() {
  const selectableItems = document.querySelectorAll('.selectable-item');

  selectableItems.forEach(item => {
    item.addEventListener('click', function() {
      this.classList.toggle('selected');
    });
  });
});

对应的CSS样式:

.selectable-item {
  padding: 10px;
  margin: 5px;
  border: 1px solid #ccc;
  cursor: pointer;
}

.selectable-item.selected {
  background-color: #007bff;
  color: white;
}

支持Shift键多选

为选集功能添加Shift键多选支持,允许用户通过Shift键选择连续范围内的项目:

let lastSelected = null;

document.addEventListener('DOMContentLoaded', function() {
  const selectableItems = document.querySelectorAll('.selectable-item');

  selectableItems.forEach(item => {
    item.addEventListener('click', function(e) {
      if (e.shiftKey && lastSelected) {
        const items = Array.from(selectableItems);
        const start = items.indexOf(lastSelected);
        const end = items.indexOf(this);

        const [startIdx, endIdx] = [Math.min(start, end), Math.max(start, end)];

        items.slice(startIdx, endIdx + 1).forEach(el => {
          el.classList.add('selected');
        });
      } else {
        this.classList.toggle('selected');
      }

      lastSelected = this;
    });
  });
});

实现全选/取消全选功能

添加全选和取消全选的控制按钮:

document.getElementById('select-all').addEventListener('click', function() {
  document.querySelectorAll('.selectable-item').forEach(item => {
    item.classList.add('selected');
  });
});

document.getElementById('deselect-all').addEventListener('click', function() {
  document.querySelectorAll('.selectable-item').forEach(item => {
    item.classList.remove('selected');
  });
});

获取选中项的数据

提供获取所有选中项数据的方法:

function getSelectedItems() {
  const selected = [];
  document.querySelectorAll('.selectable-item.selected').forEach(item => {
    selected.push({
      id: item.dataset.id,
      text: item.textContent
    });
  });
  return selected;
}

使用事件委托优化性能

对于大量可选元素,使用事件委托可以提高性能:

document.addEventListener('DOMContentLoaded', function() {
  const container = document.getElementById('selectable-container');

  container.addEventListener('click', function(e) {
    if (e.target.classList.contains('selectable-item')) {
      e.target.classList.toggle('selected');
    }
  });
});

添加拖拽选择支持

实现通过鼠标拖拽进行框选的功能:

let isDragging = false;
let startX, startY;

document.addEventListener('mousedown', function(e) {
  if (e.target.classList.contains('selectable-container')) {
    isDragging = true;
    startX = e.clientX;
    startY = e.clientY;

    const selectionBox = document.createElement('div');
    selectionBox.className = 'selection-box';
    selectionBox.style.left = startX + 'px';
    selectionBox.style.top = startY + 'px';
    document.body.appendChild(selectionBox);
  }
});

document.addEventListener('mousemove', function(e) {
  if (!isDragging) return;

  const selectionBox = document.querySelector('.selection-box');
  const currentX = e.clientX;
  const currentY = e.clientY;

  selectionBox.style.width = Math.abs(currentX - startX) + 'px';
  selectionBox.style.height = Math.abs(currentY - startY) + 'px';
  selectionBox.style.left = Math.min(currentX, startX) + 'px';
  selectionBox.style.top = Math.min(currentY, startY) + 'px';
});

document.addEventListener('mouseup', function() {
  if (isDragging) {
    isDragging = false;
    const selectionBox = document.querySelector('.selection-box');
    if (selectionBox) selectionBox.remove();
  }
});

对应的CSS样式:

js实现选集

.selection-box {
  position: absolute;
  background-color: rgba(0, 123, 255, 0.3);
  border: 1px solid #007bff;
  pointer-events: none;
  z-index: 1000;
}

这些方法提供了从基础到进阶的选集功能实现,可以根据具体需求进行组合和扩展。

标签: 选集js
分享给朋友:

相关文章

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现定位

js实现定位

使用Geolocation API获取当前位置 在JavaScript中,可以通过浏览器内置的Geolocation API获取用户的地理位置信息。该API需要用户授权才能访问位置数据。 if (n…

实现继承js

实现继承js

实现继承的方式 在JavaScript中,实现继承可以通过多种方式完成,每种方式都有其优缺点。以下是几种常见的实现继承的方法: 原型链继承 原型链继承是最基本的继承方式,通过将子类的原型指向父类的实…

js实现弹框

js实现弹框

使用 alert 实现简单弹框 JavaScript 的 alert 方法可以直接显示一个简单的弹框,内容为纯文本: alert("这是一个简单的弹框"); 使用 confirm 实现确认弹框…

js 实现mvc

js 实现mvc

MVC 模式简介 MVC(Model-View-Controller)是一种软件设计模式,将应用程序分为三个核心组件:模型(Model)处理数据和业务逻辑,视图(View)负责展示数据,控制器(Con…

js实现同步

js实现同步

同步与异步的概念 在JavaScript中,同步代码会按照顺序执行,每一行代码必须等待上一行代码执行完成后才能运行。异步代码则允许在等待某些操作(如网络请求)完成的同时继续执行其他代码。 实现同步的…