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

在Svelte中如何获取事件触发目标的data自定义属性值

错误原因

你之前的写法存在3个核心问题:

  • 类选择器语法错误:querySelector("item")是匹配<item>标签,匹配类名为item的元素需要加.前缀,正确写法是querySelector(".item")
  • 事件对象属性误用:e.target指向你实际点击的最内层元素(比如内部的<p>、<strong>标签),从内层子元素向下查询.item自然返回空,调用getAttribute就会抛出空指针错误
  • 属性名写错:getAttribute("url")无法匹配data-url属性,要么用getAttribute("data-url"),要么用更简便的dataset.url读取data-*属性

最优解决方案

直接用e.currentTarget获取绑定点击事件的元素即可,它永远指向你写了on:click的那个.item外层div,不受点击位置影响:

const goToPage = (e) => {
  const slug = e.currentTarget.dataset.url;
  console.log("slug is:", slug);
  window.location.href = slug;
};

备选方案(事件委托场景适用)

如果需要用e.target做事件委托,可以用closest方法向上查找最近的.item元素,避免点击内层元素匹配失败的问题:

const goToPage = (e) => {
  const itemEl = e.target.closest('.item');
  // 兜底避免找不到元素的异常
  if (!itemEl) return;
  const slug = itemEl.getAttribute('data-url');
  console.log("slug is:", slug);
  window.location.href = slug;
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:15:03