javascript - innerHTML如何去除缩进
问题描述
已解决各位好:
欲在html中用template标签里面写Markdown,再用js对Markdown进行处理转换成html,局部dom结构如下:
<p class='content'> <template type='markdown'> Welcome ==== My name is Hung </template></p><script type='text/javascript'> document.addEventListener(’DOMContentLoaded’ ,function (event){ var $templates = document.querySelectorAll(’template[type='markdown']’) $templates.forEach(function ($template){ console.log(marked($template.innerHTML)); }) })</script>
但是因为template标签有缩进,导致了marked把内容当做段落代码处理:
请问又没法办法清除这些缩进,但是又不影响正常缩进的方式,或者不用template标签的其他方式
问题解答
回答1:给你一个思路,统计每一行前面的空白符,得到一个最小值,再按这个最小值清除
补上代码
document.querySelectorAll(’template[type='markdown']’).forEach($template => { var lines = $template.innerHTML.split(/rn|n/) var trimLen = lines.reduce((minLen, line) => { var len = (/S/.exec(line) || {index: 0}).index if (len < minLen) { return len } return minLen }, Infinity) if (trimLen > 0) { lines = lines.map(line => line.slice(trimLen)) } console.log(marked(lines.join(’n’)))})回答2:
document.querySelectorAll(’template[type='markdown']’).forEach(($template) => { let lines = $template.innerHTML.split(’n’) let linesNum = lines.length if (linesNum > 0){ !!/^s*$/.test(lines[0]) && lines.shift() !!/^s*$/.test(lines[linesNum-1]) && lines.pop() } let markdown = lines.map(line => line.substring(Math.min(...lines.map(line => line.match(/^s*/)[0].length)))).join(’n’) $template.parentElement.innerHTML = marked(markdown)})
相关文章:
1. python - 求一个在def中可以实现调用本def满足特定条件continue效果的方法(标题说不太清楚,请见题内描述)2. $fields = $values = [];这条代码一直定义不了,一直报错,老师的源码也是被报错的,执行不了,请问该怎么解决这个问题3. mysql - SQL操作时间的函数?4. java - mybatis怎么实现在数据库中有就修改,没有就添加5. docker内创建jenkins访问另一个容器下的服务器问题6. 正则表达式 - python pandas的sep参数问题7. javascript - 用表单提交两个时间段请求后台返回对应数据时出现的一些问题!8. angular.js - angularjs的自定义过滤器如何给文字加颜色?9. MYSQL新建用户设置可以远程访问的问题10. docker api 开发的端口怎么获取?
![$fields = $values = [];这条代码一直定义不了,一直报错,老师的源码也是被报错的,执行不了,请问该怎么解决这个问题](http://www.haobala.com/attached/image/news/202205/093622cb60.png)