需求:因为有一段html需要传递到其他的地方,内联样式可能与其他的样式冲突,所以要将写在style标签中的内联样式转换为行内样式

思路:

    /*** 参数接收html字符串* 将内联样式表里面的样式改为行内样式* */transStyle(html){/*** 检测有没有style标签* */const h = $(html)[0]const style = h.getElementsByTagName('style')[0]if(!style) return htmlconst shtml = style.innerHTML.replace(/\n\s*/g,'')/*** 解析类名,暂时只处理类名。* */let s1 = shtml.split('}')s1 = s1.filter(item=>item!=="")const styleMap = this.generateStyleMap(s1)styleMap.forEach((val,key)=>{/*** 根据key类名获取元素* 为元素添加val 行内样式* */const elements = h.getElementsByClassName(key)let v = val.replace(/\s*/g,'')if(v[v.length-1]==';')v = v.slice(0,-1)Array.prototype.forEach.call(elements, function (element) {const s = element.getAttribute('style')if(!s){element.setAttribute('style',v)}else{if(s[s.length-1]==';') element.setAttribute('style',s+v)else element.setAttribute('style',s+";"+v)}});})style.parentNode.removeChild(style)return h.outerHTML}generateStyleMap(arr){const m = new Map()arr.forEach(item=>{let s2 = item.split('{')if(!(/,/).test(s2[0])){const k = s2[0].slice(1)this.addStyleMapItem(m,k,s2[1])}else{let s3 = s2[0].split(',')s3=s3.map(item=>item.slice(1))s3.forEach(i=>{this.addStyleMapItem(m,i,s2[1])})}})return m}addStyleMapItem(map,key,addItem){if(map.has(key)){let v = map.get(key).trim()if(v[v.length-1]!==';') v=v+";"v = map.get(key)+addItemmap.delete(key)map.set(key,v)}else{map.set(key,addItem)}}

将html中的style内联样式转换为行内样式相关推荐

  1. html中内联元素排列对齐原理,html标签中的内联元素(行内元素)详解

    html内联元素,也叫行内元素,相邻的多个内联元素是水平横向排列显示在同一行,其宽度随内容的变化而变化,在同一行显示多个内容,就可以使用内联元素来实现,这样就不需要将块级元素设置为浮动或绝对定位也能在 ...

  2. CSS中块级元素,行内块元素,行内元素的特点

    CSS自学笔记 目录 一.什么是元素显示模式 二.CSS的元素显示模式 1.块元素 2.行内元素 3.行内块元素 前言 网页的标签非常多,在不同地方会用到不同类型的标签,了解他们的特点可以更好的布局我 ...

  3. html 在盒子中字体垂直,第五章,css行内盒模型和文字样式

    一,盒模型 发现默认样式,会破坏布局,比如p标签的默认样式 p标签默认样式 从图片中我们可以看到我们并没有加margin值,可是左边依然有空隙出现,这就是p标签的默认样式,那我们怎么去掉一些会破坏我们 ...

  4. html h1转换为行内,css中转换为行内样式的解决方案(css-inline)

    聊聊场景 发送邮件 在第三方网站中嵌入HTML 从其他编辑器拷贝编辑好的文章发布到微信.今日头条等自媒体 在以上场景使用行内样式的兼容性要高很多,也可以保持原样式不变 解决方案 这两种方案功能和 Ap ...

  5. 怎么修改html行内样式表,原生JS获取及设置CSS样式-1.行内样式

    面试中,应该会经常被问到样式的写法以及如何使用原生JS获取及操作样式的问题吧,让我给大家总结一下~ HTML中样式的写法不外乎以下四种方式 行内样式 假装有内容 head内部样式 div { widt ...

  6. css中标签显示模式、块元素、行内元素、行内块元素、显示模式转换

    标签显示模式display: HTML标签一般分为块标签(块元素:block-level)和行内标签(行内元素:inline-level)两种类型,但是还有第三种说法行内块元素:table-row-g ...

  7. 抽象数据类型(顺序栈)、断言、包含头文件、内联函数、非内联成员函数[C++ In Action][4]...

    1. C++中的接口与实现思想, 即类的定义.数据成员的定义.函数原型在接口文件中进行, 实现代码放在实现文件中 2. 函数调用开销:调用前要先保存寄存器,并在返回点恢复:复制实参:程序必须转入一个新 ...

  8. C++的内联函数和非内联函数的区别

    一.内联函数和非内联函数的定义 1.内联函数 inline void test(); void test() { cout<<"test"<<endl; } ...

  9. 【内联元素居中、内联块元素居中、区块元素居中】06

    居中 文章目录 居中 1. 文字.内联元素.内联块元素在父元素居中 2. 区块元素在父元素中居中 3. 练习 1. 文字.内联元素.内联块元素在父元素居中 文字.内联元素居中. 父元素设置:text- ...

最新文章

  1. python二分法查找算法_顺序查找算法和折半(二分法)查找算法,C语言查找算法详解...
  2. HDU1559(二维树状数组)
  3. 干掉服务状态!从 Session 到 Token,复杂度降低100倍!
  4. java 循环list 对象_java计算list集合中重复对象的次数及for循环内外创建对象
  5. 使用vue.js devtools遇到的磕磕绊绊
  6. 栈一:用两个栈实现队列
  7. tilecache2.11在windows apache2.22安装部署
  8. WPF 实现一个酷酷的Loading
  9. 全年营业额怎么计算_门店盈亏平衡计算及案例分析 | 商品管理
  10. “约见”面试官系列之常见面试题之第四十六篇web标准理解和认识(建议收藏)
  11. mysql 数据库查询测试_MySQL查询测试经验
  12. java的getshape()_JAVA(Swing)中的镜像形状
  13. 线性表顺序存储的基本操作方法(C语言)
  14. mysql汪晓青课后答案_MySQL数据库基础实例教程
  15. 数字图像处理篇(1)数字图像基础
  16. Android产品研发(十一)--应用内跳转Scheme协议
  17. word大篇幅文档文字快速制作ppt
  18. linux xdp简介
  19. 地理信息系统名词解释大全(二)
  20. 正则表达式,各种空字符和空格字符

热门文章

  1. 运筹说 第39期 | 运输问题经典例题讲解
  2. 2021天梯赛 L2-037 包装机题解
  3. 基于php的体育场在线预约系统的设计与实现--毕业论文(可仅作参考)
  4. checksum校验
  5. Spring4 MVC Hello Wrold
  6. mamp mysql5.6_MAMP PRO的mySQL启动失败
  7. 已知坐标增量求坐标方位角_测量员经常应用到的坐标测量!干货!
  8. 检查服务器是否支持ipv6
  9. studioone机架效果模板_贾爽:带你认识StudioOne机架自带的两个混响效果器!
  10. wps office2019PC版和Mac版_Mac版Office特有的功能 Windows用户别眼馋