当前位置:首页 > 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实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…

js实现原理

js实现原理

JavaScript 实现原理 JavaScript 是一种解释型语言,其实现原理涉及多个核心组件和运行机制,包括引擎、运行时环境、事件循环等。 引擎与解释执行 现代 JavaScript 引擎(如…