text=<<“此处” 这个 是 A类 多行 字符串 酒店雇员和饭馆雇员
43个答案
更新:
var html=变量html=` <div> <span>此处显示一些HTML</span> </div> `;
ES5原始答案:
“foo\ 巴“
-
283 -
45 -
63 @Nate在 ECMA-262第5版 第7.8.4节和调用 线条延续 :“行结束符字符不能出现在字符串文本中,除非作为 线条延续 生成空字符序列。 要使行结束符字符成为字符串文字的String值的一部分,正确的方法是使用转义序列,例如\n或\u000A。 " – 一些 评论 2012年9月25日2:28 -
24 -
25
ES6更新:
const htmlString=`问候 多线 字符串!`;
const htmlString=`${user.name}喜欢您关于字符串的帖子`;
user.name+“喜欢你关于字符串的帖子”
ES5原始答案:
谷歌JavaScript风格指南 建议使用字符串串联而不是转义换行:
不要这样做:
var myString='一个相当长的英文文本字符串,错误消息\ 事实上,这只是一个错误\ 让活力兔子脸红的信息(通过\ 那些施瓦辛格墨镜)! 我在哪里? 哦,是的\ 您有一个错误,所有多余的空白都是\ 只是肉汁。 祝你今天愉快;
在编译时,不能安全地去除每一行开头的空白; 斜杠后面的空格将导致棘手的错误; 虽然大多数脚本引擎都支持这一点,但它不是ECMAScript的一部分。
使用字符串串联:
var myString='相当长的英语文本字符串,错误消息'+ “实际上,这只是一个错误”+ “让活力兔脸红的信息(一直到现在”+ “那些施瓦辛格墨镜)! 我在哪里? 哦,是的,”+ '您有一个错误,所有多余的空白都是'+ “只是肉汁。 祝你今天愉快;
-
30 我不理解谷歌的建议。 除极旧的浏览器外,所有浏览器都支持反斜杠后跟换行方法,为了向后兼容,将来还会继续这样做。 唯一需要避免的是,如果您需要确保在每行末尾添加一个且只有一个换行符(或没有换行符)(另请参阅我对已接受答案的评论)。 – 马特·布朗 评论 2013年2月26日18:40 -
8 请注意,IE11、Firefox 31、Chrome 35或Safari 7不支持模板字符串。 请参见 kangax.github.io/compat-table/es6 – 埃里克普 评论 2014年5月24日2:41 -
46 @他们已经记录了MattBrowne Google的建议,按照原因的重要性排序:(1)每行开头的空白[在本例中,您不希望字符串中有空白,但它在代码中看起来更好](2)斜杠后面的空白将导致棘手的错误[如果您以 \ 虽然大多数脚本引擎都支持这一点,但它不是ECMAScript的一部分[即为什么使用非标准功能?]记住这是一个样式指南,它是关于使代码易于阅读+维护+调试:而不仅仅是“它工作正常”。 – 什雷瓦察尔 评论 2016年7月31日20:29 -
三 令人惊讶的是,这么多年来,字符串串联仍然是实现这一点的最佳/最安全/最兼容的方法。 模板文字(上面的答案)在IE中不起作用,转义行只是一团乱麻,你很快就会后悔 – 蒂亚戈·杜阿尔特 评论 2016年11月11日12:31 -
三
var myString= ['<div id=“someId”>', '一些内容<br/>', '<a href=“#someRef”>someRefTxt</a>', '</div>' ].join(“\n”);
var myString= '<div id=“someId”>\ 一些内容<br/>\ someRefTxt\ </div>';
var myString=(函数(){/* <div id=“someId”> 一些内容<br/> someRefTxt</a> </div> */}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];
let str=`这是一个文本 具有多行。 解释逃逸, \n是一个换行符; let str=String.raw`这是一个文本 具有多行。 不解释Escapes, \n不是换行符;
-
40 -
86 -
23 -
28 @KooiInc您的测试从已经创建的数组开始,这会歪曲结果。 如果添加数组的初始化,直接串联会更快 jsperf.com/string-concat-不带stringbuilder/7 请参见 stackoverflow.com/questions/51185/… 作为新行的一个技巧,它可能还可以,但它确实做了比它应该做的更多的工作 – 阮门德斯 评论 2013年8月4日8:02 -
12 @BMiner:1)“过早优化是万恶之源”——Donald Knuth,2)“可读性”是旁观者的眼中钉 – 用户2418182 评论 2014年3月25日15:27
此处的函数Doc(f){ return f.toString()。 替换(/^[^\/]+\/\*!?/,'')。 替换(/\*\/[^\/]+$/,''); }
var tennysonQuote=hereDoc(函数(){/*! 他们不回答, 他们没有理由, 他们只有做和死 */});
IE 4-10 歌剧9.50-12(非9-) Safari 4-6(不在3-中) 铬1-45 Firefox 17-21( 不在16- ) Rekonq 0.7.0-0.8.0 Konqueror 4.7.4中不支持
设foo=` 酒吧喜欢蛋糕 baz喜欢啤酒 啤酒爱人们 `.remove缩进()
-
287 -
5 jsfiddle.net/fqpwf 适用于Chrome 13和IE8/9,但不适用于FF6。 我不想这么说,但我喜欢它,如果它是每个浏览器的故意功能(这样它就不会消失),我会使用它。 – 杰森·克莱班 评论 2011年9月9日21:36 -
三 -
2 a.toString().substring(15,a.toString().length-4)也可以,不需要扫描整个字符串(尽管很可能会扫描,但计数会使它再次扫描。哦,好的。) – 洛德韦克 评论 2012年1月8日23:53 -
三
var myString=函数(){/* 这是一些 令人敬畏的多线 使用注释的字符串 函数内部 作为字符串返回。 享受jimmy操纵的代码。 */}.toString().slice(14,-3) 警报(myString)
-
50 -
2 -
59 -
9 -
8
<script type=“bogus”id=“multi”> 我的 多行 一串 </script> <脚本> 警报($('#multi').html()); </script>
-
25 -
10 -
2 我更喜欢将超过80/120个字符的内容拆分为多行,恐怕这不仅仅是模板。 我现在更喜欢“line1”+“line2”语法。 它也是最快的(尽管这可能与真正的大型文本相媲美)。 不过这是一个很好的技巧。 – 洛德韦克 评论 2012年2月3日22:51 -
29 -
6
<div id=“UniqueID”style=“display:none;”> 串 打开 多个 线 在这里 </div>
$(“#UniqueID”).html();
警报($('#UniqueID').html());
-
4 谢谢你! 这是我找到的唯一解决我问题的答案,它涉及到可能包含单引号和双引号任意组合的未知字符串,这些字符串直接插入到代码中,没有机会进行预编码。 (它来自创建JS的模板语言——仍然来自可信的来源,而不是表单提交,所以它并不是完全疯狂的)。 – 辛烯 评论 2013年6月23日17:19 -
-
4 -
4 -
1 @Pacerier我从谷歌和其他网站上读到的所有内容都说,现在谷歌做索引 显示:无 内容,很可能是由于JavaScript-styled front-ends的流行。 (例如,一个带有隐藏/显示功能的FAQ页面。)不过,你需要小心,因为谷歌表示,如果隐藏内容的设计似乎是为了人为地抬高你的SEO排名,他们可能会惩罚你。 – 加文 评论 2017年8月8日13:12
var MultiLine=“1\ 2\ 3\ 4\ 5\ 6\ 7\ 8\ 9';
var MultiLine=“1” +'2' +'3' +'4' +'5';
var多线=[ '1', '2', '3', '4', '5' ].join(“”);
`{{title}}</h1> <h2>{{hero.name}}详细信息</ h2> <div><label>id:</label>{hero.id}} <div><label>name:</label>{hero.name}} `
-
11 -
添加 <script></ 脚本> 包含多行文本的块 头 标签; 按原样获取多行文本…(注意文本编码:UTF-8,ASCII) <脚本> //纯javascript var text=document.getElementById(“mySoapMessage”).innerHTML; //使用JQuery的安全文档 $(document).ready(function()){ var text=$(“#mySoapMessage”).html(); }); </script> <script id=“mySoapMessage”type=“text/plain”> <soapenv:Envelope xmlns:soapenv=“ http://schemas.xmlsoap.org/soap/envelope/ “xmlns:typ=”。。。 "> <soapenv:标题/> <soapenv:正文> <典型:getConvocadosElement> ... </typ:getConvocadosElement> </soapenv:Body> </soapenv:信封> <!-- 此注释将出现在字符串-->中 //呃,javascript注释。。。 SOAP请求将失败 </script>
-
-
-
如果您正在使用ajax查询,也可以使用它们。 你可以尝试更改标题 xhttp.setRequestHeader(“Content-type”,“application/x-www-form-urlencoded”); 除了在JS中输入错误的注释之外,我不记得还有其他问题。 没有问题的空间。 评论 2015年10月28日5:40
const value=`多行` const text=`这是一个 ${value} js中的字符串`; console.log(文本);
string='我的长字符串…\n' +'在此处继续\n' +“还有这里。”;
-
三 -
-
7 -
三
var新注释/*<<< 电动势 <li class=“photobooth-comment”> <span class=“username”> <a href=“#”>您</a>: </span> <span class=“comment-text”> $文本 </span> @<span class=“comment-time”> 二维 </span>以前 </li> 电动势*/ //注意,这里的script标记被硬编码为FIRST标记 new_comment=document.currentScript.innerHTML.split(“EOF”)[1]; document.querySelector(“ul”).innerHTML=new_comment.replace('$text','这是一个动态创建的文本');
<ul>
-
17 -
1 -
1 jsfiddle-fix格式 -我一定是在控制台中全局定义了“you”。 现在工作(chrome/osx)。 将注释添加到var的好处是,您不在函数上下文中, jsfiddle-function-heredoc函数 尽管函数对于类方法来说很酷。 无论如何,最好给它传递一个替换{this:th}对象。 无论如何,把疯狂的事情推向极限是很有趣的:) – 亲欧派 评论 2015年6月1日16:44 -
1 忘掉那些仇恨者吧。 这是唯一正确的答案栏ES6。 所有其他答案都需要串联、某种计算或转义。 这真的很酷,我打算用它来为我的业余爱好制作的游戏添加文档。 只要这个技巧不用于任何可能引发错误的东西(我可以看到有人会怎么说“分号,derp。让我们把注释放在下一行。”然后它会破坏你的代码。)但是,这真的是我的业余游戏中的一件大事吗? 不,我可以用这个很酷的技巧做一些有用的事情。 回答得很好。 – 托马斯·迪格南 评论 2015年7月27日21:10 -
2 我从来没有勇气在生产代码中使用过这种技术,但我经常在单元测试中使用这种技术,在这种测试中,最容易将某些结构的值转储为(相当长的)字符串,并将其与“应该”的值进行比较。 – 本·麦金太尔 评论 2016年2月3日0:00
之前
var str=“”+ '<! doctype html>'+ '<html>'+ “<正文>”+ '<h1> ❤ 独角兽</h1>'+ “</body>”+ '</html>'+ '';
之后
var str=多行(函数(){/* <! doctype html> <html> <body> <h1> ❤ 独角兽</h1> </body> </html> */});
-
1 -
三 -
但是它说“虽然它在浏览器中运行良好,但主要用于Node.js。使用风险自负。虽然在浏览器中工作良好,但它主要用于Node.js。风险自负”(只是要小心XD) 评论 2014年7月14日9:37 -
-
1
let str=`多行字符串。 福。 巴`
多行字符串。 福。 酒吧。
let str=`多行字符串。 食品。 巴`
多行字符串。 食品。 酒吧。
let str=`多行字符串。 食品。 酒吧。`。 替换(/\n+/g,'\n');
完全正确
text=`此 是 A类 多行 字符串 ` //测试 console.log(JSON.stringify(文本)); console.log(文本);
<script type=“text/javascript”src=“ https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js “></script> <div class=“crazy_idea”thorn_in_my_side='<表border=“0”> <tr> <td><span class=“mlayouttablecellsdynamic”>套餐价格65.00美元</span></td> </tr> </table>'></div> <script type=“text/javascript”> 警报($(“.crady_idea”).attr(“thorn_in_my-side”); </script>
-
8 -
6 -
三 不,不是。 应该使用模板:$.tmpl()( api.jquery.com/tmpl ),或EJS( embeddedjs.com/getting_started.html )否决票的一个原因是它离有效代码很远,使用它可能会导致巨大的显示问题。 评论 2012年3月24日0:07 -
-
这个不起作用: 在JavaScript中创建多行字符串 这工作得很好,我还发现了如何在记事本++源代码视图中使其看起来很好: 在JavaScript中创建多行字符串
它对firefox或opera不起作用; 仅适用于IE、chrome和safari。
Function.prototype.extractComment=函数(){ var startComment=“/*!”; var endComment=“*/”; var str=this.toString(); var start=str.indexOf(startComment); var end=str.lastIndexOf(endComment); return str.slice(start+startComment.length,-(str.length-end)); };
var tmpl=函数(){/*! <div class=“navbar-collapse崩溃”> <ul class=“nav-navbar-nav”> </ul> </div> */}.extractComment();
require.js:“需要文本”。
var-template=require('text!template.html’)
NPM/browserify:“brfs”模块
var fs=要求(“fs”); var template=fs.readFileSync(template.html,'utf8');
例子:
let name='Willem'; 让年龄=26; let multilineString=` 我的名字是:${name} 我的年龄是:${age} `; console.log(multilineString);
兼容性:
它是在 欧洲标准6 // 预计2015年 现在所有主要浏览器供应商(除了internet explorer)都支持它
var模板={ myString:`这是 多行 字符串` } 警报(templates.myString);
var模板= { myString:function(){/* 这是一些 令人敬畏的多层 使用注释的字符串 函数内部 作为字符串返回。 享受jimmy操纵的代码。 */}.toString().slice(14,-3) } 警报(templates.myString)
接口外部模板 { myString:字符串; } 声明var模板:externTemplates; 警报(templates.myString)
-
有关于iPad/Safari限制的文档吗? MDN似乎认为一切都很好- developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… – 坎贝尔 评论 2017年8月5日18:15 -
var multilineString=`一行文本 第二行文本 第三行文字 文本的第四行`;
//合并多个空白并修剪输出 const t=(strings)=>{return strings.map(s)=>s.replace(/\s+/g,'')).join(“”).trim()} 控制台.log(t` 这个 是 A类 多行 字符串 `); //输出:“这是一个多行字符串” //类似但保留空白: const tW=(strings)=>{return strings.map(s)=>s.replace(/\s+/g,'\n')).join(“”).trim()} 控制台.log(tW` 这个 是 A类 多行 字符串 `); //输出:“这是多行字符串”
var string=“line1\//注释、空格或制表符在此处引发错误 第2行“;