news 2026/9/13 8:31:50

lucide 原生 JS 如何替换 <template> 模板元素里的 data-lucide 占位图标?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
lucide 原生 JS 如何替换 <template> 模板元素里的 data-lucide 占位图标?

lucide 原生 JS 如何替换 模板元素里的 contenteditable="false">【免费下载链接】lucideBeautiful & consistent icon toolkit made by the community. Open-source project and a fork of Feather Icons.项目地址: https://gitcode.com/GitHub_Trending/lu/lucide

lucide 的createIcons默认只处理文档中直接渲染的元素:<template>标签内部的data-lucide占位图标默认不会被替换成 SVG。如果你的业务里用<template>存放重复的卡片、列表行等模板片段,再配合document.importNode克隆使用,就需要额外开启createIconsinTemplates选项,让占位图标在模板内容(template.content)中先被替换,后续克隆出来的节点才会带上真正的图标。

以下内容适用于 Vanilla JavaScript 项目(lucide 文档的 Getting started 指南面向的就是原生 JS 环境,项目本身可以用 Vite、Parcel 等脚手架创建)。完成后的结果:<template>内容里的<i>pnpm add lucide

yarn add lucide
npm install lucide
bun add lucide

在 HTML 中放置占位图标

按文档示例,把data-lucide占位元素放进<template>内,并准备一个用来挂载克隆结果的容器:

<!DOCTYPE html> <html> <body> <template id="template"> <i>import { createIcons, Backpack } from 'lucide/dist/cjs/lucide'; import "./styles.css"; createIcons({ icons: { Backpack, }, inTemplates: true });

文档推荐只引入用到的图标,而不是import { createIcons, icons } from 'lucide'后把icons全量传入——后者会把所有图标打进 bundle。icons对象中的键(Backpack)对应模板里data-lucide="backpack"的图标名,占位图标需要用到的图标都要包含在这个对象里。

inTemplatescreateIcons的四个附加选项之一,文档原文说明其作用是 "also replace icons inside<template>tags"。

把替换后的图标带进页面

替换完成后,图标位于template.content这个片段中,<template>本身不会渲染。文档示例用document.importNode深度克隆内容并挂到容器上:

const container = document.getElementById("container"); const template = document.getElementById("template"); const firstClone = document.importNode(template.content, true); container.appendChild(firstClone); const secondClone = document.importNode(template.content, true); container.appendChild(secondClone);

示例连续克隆两次,是为了展示同一段模板内容可以被复用为多个实例——因为替换发生在template.content上,后续每次克隆拿到的都是已包含 SVG 的版本。

结果验证

按上面文档示例的代码运行页面后,预期表现为:#container内出现两份从模板克隆出的节点,节点中原本写着<i><script src="https://unpkg.com/lucide@latest"></script> <script> lucide.createIcons(); </script>

同样的,需要覆盖<template>时把选项传进去即可,例如lucide.createIcons({ inTemplates: true });(CDN 构建自带全部图标,无需手动传入icons映射)。

与当前场景相关的其他createIcons选项,按文档说明:

  • nameAttr:调整用于查找图标的属性名,默认就是data-lucide
  • root:指定替换所发生的 DOM 元素,适合只处理大 DOM 中的小区域或 Shadow DOM 内的元素——如果你只在某个局部容器内操作,可以通过它限定替换范围;
  • attrs:为生成的 SVG 附加自定义属性,例如 CSS class 或 stroke 相关配置。

这些选项与inTemplates互不冲突,可以在同一次createIcons调用中一起传入。

更多细节见仓库中的 Content Template element 文档 和 Getting started 文档。

【免费下载链接】lucideBeautiful & consistent icon toolkit made by the community. Open-source project and a fork of Feather Icons.项目地址: https://gitcode.com/GitHub_Trending/lu/lucide

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 8:30:18

C#与C语言核心差异与应用场景全解析

1. 项目概述&#xff1a;C#与C语言的定位差异在编程语言的世界里&#xff0c;C#和C就像两个不同时代的建筑大师。C语言诞生于1972年&#xff0c;是系统编程领域的基石语言&#xff0c;直接影响操作系统内核、嵌入式系统等底层开发。而C#作为2000年问世的现代语言&#xff0c;更…

作者头像 李华
网站建设 2026/9/13 8:30:06

Lithe-IDEA:面向Spring Boot的轻量级Java开发环境

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 8:28:42

分部积分法怎么选u?公式法与表格法速成技巧全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 8:28:04

HCIA综合实验完整实战:从VLAN到NAT的企业网络配置与排错指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华