JavaScript 中的多行文本
有时候,我们需要使用 JavaScript 构造一些 HTML 代码,如下:
1
2
3
4
5
<div id="outer">
<div id="inner">
内容
</div>
</div>
用 JavaScript 字符串来表示就是:
1
const html = '<div id="outer"><div id="inner">内容</div></div>'
为了可读性和避免写错,就有强烈的写成带缩进的多行文本的需求。 现阶段,JavaScript 的多行文本,大家马上能想到的就是用 ES6 的字符串模板字面量来创建。
1
2
3
4
5
6
7
const html = `
<div id="outer">
<div id="inner">
内容
</div>
</div>
`
忆苦思甜,以前都是怎么做的呢?
可能大家还有印象,最笨拙的字符串拼接方法:
1
2
3
4
5
6
var html = ''
+ '<div id="outer">'
+ '<div id="inner">'
+ '内容'
+ '</div>'
+ '</div>'
还有利用反斜杠的方式:
1
2
3
4
5
6
7
var html = '\
<div id="outer">\
<div id="inner">\
内容\
</div>\
</div>\
'
利用数组的方式:
1
2
3
4
5
6
7
var html = [
'<div id="outer">',
' <div>',
' 内容',
' </div>',
'</div>'
].join('')
不走寻常路的利用读取函数内容的方式:
1
2
3
4
5
6
7
8
9
10
11
function hereDoc(docFn) {
return docFn.toString().replace(/^[^\/]+\/\*!?\s?/, '').replace(/\*\/[^\/]+$/, '')
}
var html = hereDoc(function(){/*!
<div id="outer">
<div id="inner">
内容
</div>
</div>
*/})
在浏览器环境中,也可以直接在 HTML 中写模板代码,然后 JavaScript 读取内容:
1
2
3
4
5
6
7
<script id="template" type="text/template">
<div id="outer">
<div id="inner">
内容
</div>
</div>
</script>
1
var html = document.getElementById('template').textContent
讲了这么多种书写多行字符串的方法,有什么用处呢?
其实什么用都没,大部分场景,无脑使用 ES6 的模板字面量即可。
全文完