Javascript 在浏览器中,如何确定哪种换行符适合操作系统?
换句话说,Javascript 在浏览器中,如何确定哪种换行符适合操作系统?,javascript,dom,cross-browser,Javascript,Dom,Cross Browser,换句话说,\n或\r\n(甚至\r)。我希望避免嗅探用户代理字符串 第一次尝试: var osLineBreak = (function () { var p = document.createElement('p'); p.innerHTML = '<br>'; return p.innerText; }()); 是否有一种我忽略的不那么复杂的技术?在网页上,linebreak的味道在操作系统中并不重要。在网页上显示时不考虑换行符。您需要一个BR元素或block元素来
\n
或\r\n
(甚至\r
)。我希望避免嗅探用户代理字符串
第一次尝试:
var osLineBreak = (function () {
var p = document.createElement('p');
p.innerHTML = '<br>';
return p.innerText;
}());
是否有一种我忽略的不那么复杂的技术?在网页上,linebreak的味道在操作系统中并不重要。在网页上显示时不考虑换行符。您需要一个BR元素或block元素来实现这一点,而这些元素是跨平台的,在所有浏览器上都受支持 请参阅以获取过于简单的解释 更新: 因此,是否需要格式化文本框,以及是否有换行符是很重要的。对不起,我的英语有点蹩脚 从检测用户的操作系统开始,类似于以下内容:
var OSName="Unknown OS";
if (navigator.appVersion.indexOf("Win")!=-1) OSName="Windows";
if (navigator.appVersion.indexOf("Mac")!=-1) OSName="MacOS";
if (navigator.appVersion.indexOf("X11")!=-1) OSName="UNIX";
if (navigator.appVersion.indexOf("Linux")!=-1) OSName="Linux";
document.write('Your OS: '+OSName);
这方面有很多,但我让它更加简单,它仍然可以像150行版本一样工作
接下来,根据返回的操作系统,在变量中设置行尾,并从中构建字符串。即:
if (navigator.appVersion.indexOf("Win")!=-1){
OSName="Windows";
linebreak = "\r\n";
} // etc ...
在网页上,linebreak的风格在操作系统中并不重要。在网页上显示时不考虑换行符。您需要一个BR元素或block元素来实现这一点,而这些元素是跨平台的,在所有浏览器上都受支持 请参阅以获取过于简单的解释 更新: 因此,是否需要格式化文本框,以及是否有换行符是很重要的。对不起,我的英语有点蹩脚 从检测用户的操作系统开始,类似于以下内容:
var OSName="Unknown OS";
if (navigator.appVersion.indexOf("Win")!=-1) OSName="Windows";
if (navigator.appVersion.indexOf("Mac")!=-1) OSName="MacOS";
if (navigator.appVersion.indexOf("X11")!=-1) OSName="UNIX";
if (navigator.appVersion.indexOf("Linux")!=-1) OSName="Linux";
document.write('Your OS: '+OSName);
这方面有很多,但我让它更加简单,它仍然可以像150行版本一样工作
接下来,根据返回的操作系统,在变量中设置行尾,并从中构建字符串。即:
if (navigator.appVersion.indexOf("Win")!=-1){
OSName="Windows";
linebreak = "\r\n";
} // etc ...
如果出于某种原因确实需要break元素,为什么不:
var br=document.createElement('br');
如果出于某种原因确实需要break元素,为什么不:
var br=document.createElement('br');
2015年更新:从下面可以看到,即使在2011年,Chrome和Firefox在所有平台上都使用了
\n
。Opera和IE在Windows上使用了\r\n
。从那时起,Opera转向了像Chrome这样的WebKit,因此可能使用\n
。IE8是最后一个在文本区域使用\r\n
的IE;从IE9开始,IE也只使用\n
。还没有测试过手机浏览器
参加聚会的时间很晚,但如果您真的想知道浏览器在
textarea
s中使用了什么行分隔符之类的字符(即使在同一操作系统上,浏览器中的字符也会有所不同),您可以通过一个诡计来了解:
function getLineBreakSequence() {
var div, ta, text;
div = document.createElement("div");
div.innerHTML = "<textarea>one\ntwo</textarea>";
ta = div.firstChild;
text = ta.value;
return text.indexOf("\r") >= 0 ? "\r\n" : "\n";
}
函数getLineBreakSequence(){
变量div,ta,text;
div=document.createElement(“div”);
div.innerHTML=“一个\n两个”;
ta=第一个孩子;
text=ta.value;
返回文本。indexOf(“\r”)>=0?\r\n:“\n”;
}
这是因为使用\r\n
的浏览器在解析HTML字符串时会动态转换\n
。下面是一个你可以自己尝试使用你最喜欢的浏览器的方法。在IE和Opera中(即使Opera在*nix上运行),您会发现它是\r\n
。在Chrome、Firefox和Safari(甚至在Windows上运行)上,您会发现它是\n
这就是说,我的经验是插入
\n
(例如,当分配给值
属性时,而不是上面的HTML字符串位)即使在通常使用\r\n
的浏览器上也能工作。但这并不意味着没有边缘案例,我必须承认我没有任何规律性地这样做(在textarea
s中插入换行符),因此,如果有问题,我真的应该在某些浏览器上使用\r\n
,我可能就是没有找到它们。2015年更新:正如你从下面看到的,早在2011年,Chrome和Firefox就在所有平台上使用\n
。Opera和IE在Windows上使用了\r\n
。从那时起,Opera转向了像Chrome这样的WebKit,因此可能使用\n
。IE8是最后一个在文本区域使用\r\n
的IE;从IE9开始,IE也只使用\n
。还没有测试过手机浏览器
参加聚会的时间很晚,但如果您真的想知道浏览器在
textarea
s中使用了什么行分隔符之类的字符(即使在同一操作系统上,浏览器中的字符也会有所不同),您可以通过一个诡计来了解:
function getLineBreakSequence() {
var div, ta, text;
div = document.createElement("div");
div.innerHTML = "<textarea>one\ntwo</textarea>";
ta = div.firstChild;
text = ta.value;
return text.indexOf("\r") >= 0 ? "\r\n" : "\n";
}
函数getLineBreakSequence(){
变量div,ta,text;
div=document.createElement(“div”);
div.innerHTML=“一个\n两个”;
ta=第一个孩子;
text=ta.value;
返回文本。indexOf(“\r”)>=0?\r\n:“\n”;
}
这是因为使用\r\n
的浏览器在解析HTML字符串时会动态转换\n
。下面是一个你可以自己尝试使用你最喜欢的浏览器的方法。在IE和Opera中(即使Opera在*nix上运行),您会发现它是\r\n
。在Chrome、Firefox和Safari(甚至在Windows上运行)上,您会发现它是\n
这就是说,我的经验是插入
\n
(例如,当分配给值
属性时,而不是上面的HTML字符串位)即使在通常使用\r\n
的浏览器上也能工作。但这并不意味着没有边缘案例,我必须承认我没有任何规律性地这样做(在textarea
s中插入换行符),因此如果有问题,我真的应该在某些浏览器上使用\r\n
,我可能还没有找到它们。只是好奇它为什么重要?请注意,分配给textContent或innerText属性的字符串没有被解析,而是被视为文本。此外,它是一个专有的Microsoft扩展(没有标准),并非所有浏览器都支持它。textContent不是所有浏览器都支持的属性,但是