当前位置:首页 > JavaScript

js 实现级联

2026-02-01 15:21:18JavaScript

级联选择实现方法

数据准备

数据结构通常采用嵌套对象或数组形式,例如:

js 实现级联

const data = [
  {
    value: 'province1',
    label: '省份1',
    children: [
      {
        value: 'city1',
        label: '城市1',
        children: [
          { value: 'district1', label: '区县1' }
        ]
      }
    ]
  }
]

动态渲染实现

通过事件监听和DOM操作实现级联更新:

js 实现级联

function renderCascade(container, data, level = 0) {
  const select = document.createElement('select');
  select.addEventListener('change', (e) => {
    const nextContainer = document.getElementById(`level-${level+1}`);
    if(nextContainer) nextContainer.innerHTML = '';

    const selected = data.find(item => item.value === e.target.value);
    if(selected && selected.children) {
      const newContainer = document.createElement('div');
      newContainer.id = `level-${level+1}`;
      container.parentNode.appendChild(newContainer);
      renderCascade(newContainer, selected.children, level+1);
    }
  });

  data.forEach(item => {
    const option = document.createElement('option');
    option.value = item.value;
    option.textContent = item.label;
    select.appendChild(option);
  });

  container.appendChild(select);
}

使用框架实现(Vue示例)

基于Vue的响应式特性简化实现:

<template>
  <div v-for="(select, index) in selects" :key="index">
    <select v-model="selectedValues[index]" @change="loadNext(index)">
      <option v-for="item in select.options" :value="item.value">
        {{ item.label }}
      </option>
    </select>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selects: [{ options: [] }],
      selectedValues: []
    }
  },
  methods: {
    loadNext(index) {
      this.selects = this.selects.slice(0, index+1);
      const current = this.findNode(this.selectedValues);
      if(current && current.children) {
        this.selects.push({
          options: current.children
        });
      }
    }
  }
}
</script>

性能优化建议

避免每次重新渲染整个级联组件,应该:

  • 使用虚拟DOM或差异化更新
  • 对大数据集采用分页加载
  • 实现缓存机制存储已加载数据

典型应用场景

  • 省市区三级联动选择
  • 商品分类多级筛选
  • 组织架构树形选择

实现时需注意处理异步数据加载、默认值设置和表单验证等常见需求。根据具体项目需求,可选择纯DOM操作或框架方案实现。

标签: 级联js
分享给朋友:

相关文章

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

js防抖和节流实现

js防抖和节流实现

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

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js实现防洪

js实现防洪

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

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue…