You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JavaScript实现自定义下拉选择器选中内容替换默认文本功能

实现方案

你需要在原有代码基础上补充两部分逻辑:CSS支持下拉框头部显示色标,JS同步选中的产品信息到头部。

第一步:补充CSS规则

给下拉框头部也添加和列表项一致的伪元素样式,用于显示选中产品的颜色图标:

/* 新增样式,让下拉框头部支持显示色标 */
.selectDropdown::before {
  height: 10px;
  width: 10px;
  content: "";
  display: inline-flex;
  margin: 0 10px;
}

第二步:修改JS点击事件

在产品项的点击监听逻辑里,补充同步选中信息到头部的代码:

var buttonSelector = document.querySelectorAll('li.product');
var selectDropdown = document.querySelector('.selectDropdown');
var toggleProduct = document.querySelector('ul');

buttonSelector.forEach(function(el) {
  el.addEventListener("click", function(ev) {
    buttonSelector.forEach(function(button) {
      button.classList.remove('activeProduct');
      // 先清除头部之前的产品类
      selectDropdown.classList.remove(button.classList[1]);
    });
    this.classList.add('activeProduct');
    
    // 同步产品类和文本到头部
    const currentProductClass = this.classList[1];
    selectDropdown.classList.add(currentProductClass);
    selectDropdown.textContent = this.textContent;
    
    // 选中后自动收起下拉列表(可选)
    toggleProduct.classList.remove("active");
    toggleProduct.classList.add("disable");
  });
});

// 下拉框展开收起逻辑可以简化为class切换
selectDropdown.addEventListener('click', function() {
  toggleProduct.classList.toggle("active");
  toggleProduct.classList.toggle("disable");
});

完整可运行整合代码

HTML

<div class="container">
  <div class="selectDropdown">Choose Option</div>
  <ul>
    <li class="product product1">Product 1</li>
    <li class="product product2">Product 2</li>
    <li class="product product3">Product 3</li>
    <li class="product product4">Product 4</li>
  </ul>
</div>

CSS

.selectDropdown {
  border: 1px solid black;
}
/* 头部色标样式 */
.selectDropdown::before {
  height: 10px;
  width: 10px;
  content: "";
  display: inline-flex;
  margin: 0 10px;
}

ul {
  max-height: 0;
  overflow: hidden;
  display: block;
  padding: 0;
}

li.product {
  list-style: none;
}

li.product::before {
  height: 10px;
  width: 10px;
  content: "";
  display: inline-flex;
  margin: 0 10px;
}

li.product.product1::before,
.selectDropdown.product1::before {
  background: yellow;
}

li.product.product2::before,
.selectDropdown.product2::before {
  background: pink;
}

li.product.product3::before,
.selectDropdown.product3::before {
  background: orange;
}

li.product.product4::before,
.selectDropdown.product4::before {
  background: red;
}

.activeProduct {
  background: yellow;
}

.active {
  max-height: 100%;
}

.disable {
  max-height: 0;
}

JS

var buttonSelector = document.querySelectorAll('li.product');
var selectDropdown = document.querySelector('.selectDropdown');
var toggleProduct = document.querySelector('ul');

buttonSelector.forEach(function(el) {
  el.addEventListener("click", function(ev) {
    buttonSelector.forEach(function(button) {
      button.classList.remove('activeProduct');
      selectDropdown.classList.remove(button.classList[1]);
    });
    this.classList.add('activeProduct');
    const productClass = this.classList[1];
    selectDropdown.classList.add(productClass);
    selectDropdown.textContent = this.textContent;
    toggleProduct.classList.remove("active");
    toggleProduct.classList.add("disable");
  });
});

selectDropdown.addEventListener('click', function() {
  toggleProduct.classList.toggle('active');
  toggleProduct.classList.toggle('disable');
});

内容的提问来源于stack exchange,提问作者harryJamesJS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 16:36:04