当前位置:首页 > JavaScript

js 实现级联

2026-02-01 15:21:18JavaScript

级联选择实现方法

数据准备

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

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

动态渲染实现

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

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>

性能优化建议

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

js 实现级联

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

典型应用场景

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

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

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

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…