电商PDP页分类筛选:点击label生成独立筛选链接问题求助
问题根源
你现有代码的错误主要集中在3个点:
- 循环绑定重复事件:
each遍历中给所有label重复绑定click事件,单次点击会触发多次回调 - 选中文本获取错误:每次都读取所有带
sr_selected类的元素文本拼接,无法拿到当前点击的单个label文本 - 插入方式错误:使用
innerHTML直接赋值会覆盖容器原有内容,无法生成独立的链接节点
修复后代码
function appendChildElement() { // 提前缓存容器节点,避免重复查询DOM const insertNode = document.querySelector(".fg-container--filterSelected"); // 直接给所有label绑定点击事件即可,不需要额外嵌套each循环 $("#filters fieldset label").click(function() { // 保存当前点击的label实例,避免异步回调上下文丢失 const $currentLabel = $(this); setTimeout(() => { // 只判断当前点击的label是否被选中,不需要匹配所有选中项 if ($currentLabel.hasClass('sr_selected')) { // 仅取当前点击label的文本 const text = $currentLabel.text(); // 生成独立的a标签节点 const newLink = document.createElement('a'); newLink.href = '#'; newLink.className = 'fg-container--filterSelected-option'; newLink.setAttribute('onclick', 'removeThisFilter()'); newLink.innerText = `${text} x`; // 追加到容器末尾,不会覆盖已有内容 insertNode.appendChild(newLink); } }, 500); }); } appendChildElement();
可选优化
如果需要支持点击label取消选中时同步删除对应筛选标签,可以给每个生成的a标签存储对应label的唯一标识(比如label的class、index属性),取消选中时匹配标识移除对应节点即可。
内容的提问来源于stack exchange,提问作者Camiicoode
相关产品推荐
相关产品推荐

