当前位置:首页 > JavaScript

js实现多选

2026-01-31 15:55:35JavaScript

实现多选功能

在JavaScript中实现多选功能可以通过多种方式完成,常见场景包括表格多选、列表多选或复选框组多选。以下是几种典型实现方法:

复选框组多选

通过监听复选框的change事件,记录选中项的value或自定义属性:

document.querySelectorAll('.checkbox-item').forEach(checkbox => {
  checkbox.addEventListener('change', function() {
    const selectedValues = Array.from(document.querySelectorAll('.checkbox-item:checked'))
                               .map(item => item.value);
    console.log('当前选中:', selectedValues);
  });
});

HTML结构示例:

js实现多选

<input type="checkbox" class="checkbox-item" value="option1"> Option 1
<input type="checkbox" class="checkbox-item" value="option2"> Option 2

表格行多选

为表格添加全选/单选功能,通常结合data-*属性存储关键信息:

// 行点击事件
document.querySelectorAll('table tbody tr').forEach(row => {
  row.addEventListener('click', (e) => {
    if (e.target.tagName !== 'INPUT') {
      const checkbox = row.querySelector('input[type="checkbox"]');
      checkbox.checked = !checkbox.checked;
      triggerSelectionUpdate();
    }
  });
});

// 全选控制
document.getElementById('selectAll').addEventListener('change', function() {
  const checkboxes = document.querySelectorAll('table tbody input[type="checkbox"]');
  checkboxes.forEach(cb => cb.checked = this.checked);
});

function triggerSelectionUpdate() {
  const selectedRows = Array.from(document.querySelectorAll('table tbody input[type="checkbox"]:checked'))
                           .map(cb => cb.closest('tr').dataset.id);
  console.log('选中行ID:', selectedRows);
}

HTML结构示例:

js实现多选

<table>
  <thead><tr><th><input type="checkbox" id="selectAll"></th></tr></thead>
  <tbody>
    <tr data-id="1"><td><input type="checkbox"></td></tr>
  </tbody>
</table>

列表项多选(Shift连续选择)

实现类似文件管理器的连续多选交互:

let lastSelected = null;

document.querySelectorAll('.selectable-item').forEach(item => {
  item.addEventListener('click', function(e) {
    if (e.shiftKey && lastSelected) {
      const items = Array.from(document.querySelectorAll('.selectable-item'));
      const start = items.indexOf(lastSelected);
      const end = items.indexOf(this);
      items.slice(Math.min(start, end), Math.max(start, end) + 1)
           .forEach(el => el.classList.add('selected'));
    } else {
      this.classList.toggle('selected');
    }
    lastSelected = this;
  });
});

CSS样式建议:

.selectable-item.selected { background-color: #e3f2fd; }

虚拟列表优化

对于大规模数据渲染,使用虚拟列表技术避免DOM性能问题:

// 基于窗口滚动事件计算可见项
window.addEventListener('scroll', () => {
  const scrollTop = document.documentElement.scrollTop;
  const visibleItems = getVisibleItems(scrollTop);
  renderItems(visibleItems);
});

function handleItemSelection(itemId) {
  // 维护一个Set存储选中项
  selectedItems.has(itemId) 
    ? selectedItems.delete(itemId)
    : selectedItems.add(itemId);
}

注意事项

  1. 状态管理:复杂场景建议使用SetMap存储选中项,避免重复
  2. 无障碍访问:为复选框添加<label>关联,确保键盘可操作
  3. 性能优化:大数据量时使用事件委托代替单个监听
  4. 框架实现:React/Vue等框架可通过状态驱动实现更简洁的多选逻辑

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

相关文章

Vue实现级联多选

Vue实现级联多选

Vue实现级联多选的方法 使用Element UI的Cascader组件 Element UI提供了Cascader组件,支持级联选择功能。通过配置props属性可以自定义节点字段名,结合checkS…

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

vue 实现多选框

vue 实现多选框

实现多选框的基础用法 在Vue中可以使用v-model指令绑定到数组类型的数据,实现多选框功能。基础示例代码如下: <template> <div> <in…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <di…