es6字符串模板之标签化模板
es6字符串模板
我们经常搞前端开发工作的都会用到。它可以保留字符串换行格式,还能接受变量。这个给前端的字符串拼接带来了非常大的方便。但是还有一种用法可能是我们平时还是没有怎么用到的。
styled-components
在项目中熟悉使用react的童鞋可能会用过styled-components,它的写法如下:
const Title = styled.h1`font-size: 1.5em;text-align: center;color: palevioletred;
`;
效果
最终就是生成一个带有上面样式属性的h1标签。
es6基础
这里看到它用到的就是es6的字符串模板。一开始我以为是预编译工具的语法。后面重温js基础时候看到了这个:
`string text``string text line 1string text line 2``string text ${expression} string text`tagFunction`string text ${expression} string text`
developer.mozilla.org
代码来源:模板字符串 - JavaScript | MDN
字符串模板前面是可以接受函数名字的,而这个函数的参数 arguments的内容是个数组,数组的第一个值是所有普通字符串的数组,剩余的元素是模板里面变量值
例如上面的代码tagFunction`string text ${expression} string text`
假设expression遍历的值是100,tagFunction的arguments的值就是
[["string text","string text"],100,
...其他变量值 //这里只有一个变量,所以不存在其他变量值]
所以,我们可以理解是执行了tagFunction函数并给该函数传递了解析字符串`string text ${expression} string text`对象
新的书写风格
既然是执行函数,那函数是可以返回值的,那我们可以在这个函数里面return个函数,这样我们就有机会把代码写成这样
alink.styles`color:${color};font-size:16px;background-color:${bgColor};
`
.props`href:${url};tabIndex:1;`
.content`跳转到:${url}`
- styles设置样式属性
- props设置标签属性
- content设置标签内容
HTMLElement对象拓展
那我们给html标签对象进行拓展方法如下:
HTMLElement.prototype.styles = function () {return this
}
HTMLElement.prototype.props = function () {return this
}
HTMLElement.prototype.content = function () {return this
}
还需要对 arguments对象进行解析,得到key,value
解析arguments
const getAttAndValueString = (args, isContent) => {let startIndex = 0const attr = args[0].map((item) => {return item.replace('\n', '').replace(/\s/g, '').trim()}).filter(item => item)const value = args.slice(1).filter(item => item)let resultString = ''attr.forEach((element, index) => {if (element.endsWith(':') || isContent) {resultString += `${element}${value[startIndex]}`startIndex++} else {resultString += `${element}`}})return resultString
}
最终代码
const getAttAndValueString = (args, isContent) => {let startIndex = 0const attr = args[0].map((item) => {return item.replace('\n', '').replace(/\s/g, '').trim()}).filter(item => item)const value = args.slice(1).filter(item => item)let resultString = ''attr.forEach((element, index) => {if (element.endsWith(':') || isContent) {resultString += `${element}${value[startIndex]}`startIndex++} else {resultString += `${element}`}})return resultString}HTMLElement.prototype.styles = function () {let resultString = getAttAndValueString(Array.from(arguments))console.log("resultString", resultString)const styleAttr = this.getAttribute("style");if (styleAttr) {resultString = `${styleAttr.endsWith(";") ? styleAttr : styleAttr + ";"} ${resultString}`}this.setAttribute("style", resultString);return this}HTMLElement.prototype.props = function () {// let resultString = getAttAndValueString(Array.from(arguments))// let obj = resultString.split(";").filter(item => item.length > 0)// obj.forEach(item => {// const [prop, ...value] = item.split(":");// this.setAttribute(prop, value.join(":"))// })return this}HTMLElement.prototype.content = function () {// this.innerText = getAttAndValueString(Array.from(arguments), true)return this}var alink = document.querySelector('#alink')var color = 'red'var bgColor = 'blue'var url = 'http://baidu.com'alink.styles`color:${color};font-size:16px;background-color:${bgColor};`.props`href:${url};tabIndex:1;`.content`跳转到:${url}`
在线效果
https://jsbin.com/kawumewoto/4/edit?html,js,output
相关文章:
es6字符串模板之标签化模板
es6字符串模板 我们经常搞前端开发工作的都会用到。它可以保留字符串换行格式,还能接受变量。这个给前端的字符串拼接带来了非常大的方便。但是还有一种用法可能是我们平时还是没有怎么用到的。 styled-components 在项目中熟悉使用react的童鞋可能会用过styled-…...
opencv入门1.1:从视频或摄像头读取图像
cv::VideoCapture是 OpenCV 中用于从视频文件或摄像头捕获图像帧的类。它提供了各种方法和函数,用于读取和处理视频数据。 以下是对 cv::VideoCapture类的详细解释和说明: 1. 打开视频源 为了使用 cv::VideoCapture,我们首先需要打开一个视…...
【数据中台】开源项目(1)-LarkMidTable
LarkMidTable 是一站式开源的数据中台,实现中台的 基础建设,数据治理,数据开发,监控告警,数据服务,数据的可视化,实现高效赋能数据前台并提供数据服务的产品。 系统演示地址 : www.l…...
VUE简易购物车程序
目录 效果预览图 完整代码 效果预览图 完整代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…...
如何清除redis缓存?
首先进入redis安装目录 当前目录下执行CMD命令(shift 右键 -> 选择 ‘在此处打开Powershell窗口’ ) 执行 redis-cli.exe -h 127.0.0.1 -p 6379flushall...
接收网络包的过程——从硬件网卡解析到IP层
当一些网络包到来触发了中断,内核处理完这些网络包之后,我们可以先进入主动轮询 poll 网卡的方式,主动去接收到来的网络包。如果一直有,就一直处理,等处理告一段落,就返回干其他的事情。当再有下一批网络包…...
正则化与正则剪枝
写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除! 文章目录 引言正则化为什么会过拟合拉格朗日与正则化梯度衰减与正则化 应用解决过拟合网络剪枝 …...
Element-Plus 图标自动导入
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…...
关于DCDC电源中的PWM与PFM
在开关电源DCDC中,我们经常会听到PWM模式与PFM模式。 关于,这两种模式,小编在之前的文章中,做过简单的描述。今天就来针对性的就这两种模式展开讲讲。 PWM:脉冲宽度调制,即频率不变,不断调整脉…...
S25FL系列FLASH读写的FPGA实现
文章目录 实现思路具体实现子模块实现top模块 测试Something 实现思路 建议读者先对 S25FL-S 系列 FLASH 进行了解,我之前的博文中有详细介绍。 笔者的芯片具体型号为 S25FL256SAGNFI00,存储容量 256Mb,增强高性能 EHPLC,4KB 与 6…...
一次【自定义编辑器功能脚本】【调用时内存爆仓】事故排查
一 、事故描述 我有一个需求:在工程文件中找得到所有的图片(Texture 2D),然后把WebGL发布打包时的图片压缩规则进行修改。 项目中有图片2千多张,其中2k分辨率的图片上百张,当我右键进行批量处理的时候&…...
【STM32单片机】简易计算器设计
文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器,使用动态数码管模块、矩阵按键、蜂鸣器模块等。 主要功能: 系统运行后,数码管默认显示0,输入对应的操作数进行四则运…...
【详解二叉树】
🌠作者:TheMythWS. 🎇座右铭:不走心的努力都是在敷衍自己,让自己所做的选择,熠熠发光。 目录 树形结构 概念 树的示意图 树的基本术语 树的表示 树的应用 二叉树(重点) 二叉树的定义 二叉树的五…...
【Amazon】在Amazon EKS集群中安装部署最小化KubeSphere容器平台
文章目录 一、准备工作二、部署 KubeSphere三、访问 KubeSphere 控制台四、安装Amazon EBS CSI 驱动程序4.1 集群IAM角色建立并赋予权限4.2 安装 Helm Kubernetes 包管理器4.3 安装Amazon EBS CSI 驱动程序 五、常见问题六、参考链接 一、准备工作 Kubernetes 版本必须为&…...
ubuntu20.04下安装标注工具CVAT
1 安装docker sudo apt-get update sudo apt-get --no-install-recommends install -y apt-transport-https ca-certificates \curl \gnupg-agent \software-properties-commoncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-r…...
pytest-pytest-html测试报告这样做,学完能涨薪3k
在 pytest 中提供了生成html格式测试报告的插件 pytest-html 安装 安装命令如下: pip install pytest-html使用 我们已经知道执行用例的两种方式,pytest.main()执行和命令行执行,而要使用pytest-html生成报告,只需要在执行时加…...
本地运行“李开复”的零一万物 34B 大模型
这篇文章,我们来聊聊如何本地运行最近争议颇多的,李开复带队的国产大模型:零一万物 34B。 写在前面 零一万物的模型争议有很多,不论是在海外的社交媒体平台,还是在国内的知乎和一种科技媒体上,不论是针对…...
Redis-Redis缓存高可用集群
1、Redis集群方案比较 哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可…...
Django之admin页面样式定制(Simpleui)
好久不见,各位it朋友们! 本篇文章我将向各位介绍Django框架中admin后台页面样式定制的一个插件库,名为Simpleui。 一)简介 SimpleUI是一款简单易用的用户界面(UI)库,旨在帮助开发人员快速构建…...
TypeScript 中的type与interface
TypeScript 中的type与interface 对于 TypeScript,有两种定义类型的方法:type与interface。 人们常常想知道该使用哪一种,而答案并不是一刀切的。这确实取决于具体情况。有时,其中一种比另一种更好,但在许多情况下&a…...
别再混用了!PyTorch实战:CrossEntropyLoss和BCEWithLogitsLoss到底怎么选?(附MNIST与多标签分类代码)
PyTorch损失函数实战指南:CrossEntropyLoss与BCEWithLogitsLoss的精准选择 当你面对一个分类问题时,选择正确的损失函数往往决定了模型的成败。PyTorch提供了多种损失函数,但CrossEntropyLoss和BCEWithLogitsLoss是最容易混淆的两个。本文将带…...
麦橘超然Flux图像生成控制台:从环境准备到生成测试的完整流程
麦橘超然Flux图像生成控制台:从环境准备到生成测试的完整流程 1. 引言 1.1 项目概述 麦橘超然Flux图像生成控制台是一款基于DiffSynth-Studio框架构建的AI绘画工具,集成了majicflus_v1模型,通过float8量化技术显著降低了显存需求。这个解决…...
RTX 4090D 24G大模型推理免配置镜像:PyTorch 2.8 + CUDA 12.4保姆级教程
RTX 4090D 24G大模型推理免配置镜像:PyTorch 2.8 CUDA 12.4保姆级教程 1. 开箱即用的深度学习环境 如果你正在寻找一个免配置、开箱即用的深度学习环境,这个基于RTX 4090D 24GB显卡优化的PyTorch 2.8镜像就是为你准备的。想象一下,不用再花…...
通过爱毕业aibiye的AI辅助,高重复率论文能实现自动润色,包括句式转换和术语优化,有效降低相似度
嘿,大家好!我是AI菌。今天咱们来聊聊一个让无数学生头疼的问题:论文重复率飙到30%以上怎么办?别慌,我这就分享5个实用降重技巧,帮你一次搞定,轻松压到合格线以下。这些方法都是我亲身试验过的&a…...
Ollama部署EmbeddingGemma-300m常见问题全解:从报错到实战
Ollama部署EmbeddingGemma-300m常见问题全解:从报错到实战 1. 为什么选择EmbeddingGemma-300m? EmbeddingGemma-300m是谷歌推出的轻量级文本嵌入模型,仅有3亿参数却继承了Gemini系列模型的强大能力。这个模型特别适合需要在本地环境部署语义…...
Java的CompletableFuture组合操作与异步流水线在微服务中的设计
Java的CompletableFuture组合操作与异步流水线在微服务中的设计 在微服务架构中,高并发与低延迟是核心需求。Java的CompletableFuture通过强大的异步编程能力,为微服务设计提供了高效的解决方案。它不仅能简化多线程任务编排,还能通过组合操…...
从“听”到“看”:希尔伯特变换如何让机械故障诊断更精准?一个振动信号分析实战
从“听”到“看”:希尔伯特变换如何让机械故障诊断更精准?一个振动信号分析实战 当工厂里的关键设备突然发出异常声响,经验丰富的老师傅可能会竖起耳朵听几秒,然后准确判断:"轴承内圈有损伤"。这种神奇的&qu…...
diffusion model的基本概念
主要分为两个步骤:加密加噪声让原图变成模糊图(Forward Process),将模糊图去噪声,让其变成清晰图(Reverse Process) 先说Recerse Process的过程本质就是去除掉无用的像素,让有用的像素留下来(类似加密与解密…...
Translumo:革命性实时屏幕翻译工具解密,颠覆你的多语言数字体验
Translumo:革命性实时屏幕翻译工具解密,颠覆你的多语言数字体验 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Tr…...
别再傻傻分不清!一张图看懂RFID、NFC和智能卡的区别与联系
1. 从门禁到移动支付:RFID、NFC与智能卡技术全解析 每天清晨,当您用门禁卡刷开小区大门,用手机在便利店完成无接触支付,或是用公交卡快速通过地铁闸机时,背后都隐藏着一系列精妙的无线通信技术。这些看似简单的"刷…...
