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

jQuery如何在多个同名class元素中选中点击按钮同列的目标元素

问题根源

你写的代码直接全局调用$(".hexpaletteval"),会选中页面里所有带这个class的元素,没有把查找范围限定在当前点击按钮所在的列,才会出现所有元素都被设置黄色背景、取值不对的问题。

修正代码

你的HTML结构本身是合理的,每个按钮和对应颜色值都包裹在同一个.colorcoloumn列容器里,只要在点击时先锚定当前列,再在列内查找目标元素即可。替换原有JS代码为如下内容:

$(".favcolor").click(function() {
  // 锚定当前点击按钮所属的列容器
  const $currentCol = $(this).closest(".colorcoloumn");
  // 仅在当前列范围内查找hex值元素
  const $hexEl = $currentCol.find(".hexpaletteval");
  // 注意.hexpaletteval是普通div,不是表单元素,用text()取内部文本
  const hexVal = $hexEl.text().trim();

  // 仅给当前列的hex元素设置黄色背景
  $hexEl.css("background-color", "yellow");

  $.ajax({
    type: "POST",
    url: "/favorite",
    data: {
      colorhex: hexVal,
      colorrgb: hextorgb(hexVal), // 请提前定义好hex转rgb的hextorgb方法
    },
    success: function(res) {
      console.log(res);
    }
  })
});
关键逻辑说明
  • 事件回调里的$(this)指向当前被点击的favcolor按钮,是做范围限定的起点
  • .closest(".colorcoloumn")会从当前按钮开始向上查找DOM树,拿到最近的一层列容器,不会匹配到其他列
  • .find()只会在当前列容器的后代元素里查找目标元素,从根源上避免选到其他列的同名class元素
  • 非表单元素(div、p、span等)不要用.val()取值,取纯文本内容用.text()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:51:46