无法在从 html 实体创建的换行符上拆分 textarea
Posted
技术标签:
【中文标题】无法在从 html 实体创建的换行符上拆分 textarea【英文标题】:Cannot split textarea on newline created from html entities 【发布时间】:2015-07-23 13:18:41 【问题描述】:我有一个需要包含新行的默认值的文本区域,因此我使用了使用从this answer 找到的 html 实体的技术
<textarea rows=4 id="mytextarea">John,2 Jane,3 John,4 Jane,5</textarea>
然后我有一个按钮,它启动一个用于解析 textarea 的按钮,我想要完成的第一件事是从 textarea 值创建一个rows
数组,但这是我遇到问题的地方。 another answer 详细介绍了哪些浏览器将换行符表示为 \r\n 以及哪些仅表示为 \n,尽管在我的情况下这可能不是绝对必要的,但我仍然决定尝试一下:
var textAreaValue = document.getElementById("mytextarea").value;
textAreaValue = textAreaValue.replace(/\s/g, ""); //remove white space
var rows = textAreaValue.replace(/\r\n/g, "\n").split("\n");
rows
但是以["John,2Jane,3John,4Jane,5"]
的形式返回。所以分裂没有效果;我做错了什么?
【问题讨论】:
因为实体仍然存在于内存字符串中。您只是看到这些实体的 RENDERED 版本。尝试拆分&#13;&#10;
。或者首先通过实体->原始解码循环运行字符串。
我投票结束我自己的问题(它不会让我删除它),因为 beercohol 的回答虽然解决了我的问题,但也表明这是一个无济于事的糟糕问题未来的其他人。因此,如果您将来遇到此问题并想对该问题投反对票,请投票关闭它;)
【参考方案1】:
您的正则表达式中的 \s 正在删除换行符。尝试注释掉该替换并再次检查您的行值,它应该与您期望的一样!
function parseText()
var textAreaValue = document.getElementById("mytextarea").value;
//textAreaValue = textAreaValue.replace(/\s/g, ""); //remove white space
var rows = textAreaValue.replace(/\r\n/g, "\n").split("\n");
alert(rows);
在此处查看 JSFiddle:http://jsfiddle.net/xs2619cn/1/
我将您的逗号更改为句号只是为了使警报输出更清晰。
【讨论】:
【参考方案2】:你不使用\n
和\r
,所以你可以拆分&#13;
或&#10;
。
var rows = textAreaValue.replace(/(&#[13|10];)+/g, "\n").split("\n");
演示:http://jsfiddle.net/rr1zvxko/
【讨论】:
还是数组长度为1:John,2Jane,3John,4Jane,5
以上是关于无法在从 html 实体创建的换行符上拆分 textarea的主要内容,如果未能解决你的问题,请参考以下文章
C# 无法通过换行符将字符串拆分为数组(来自 StreamReader)
如何在从 .Include 实体框架查询返回的数据上指定 where 子句?