不同浏览器中换行符的处理小结

起初是想用String.split();这个方法处理字符串,当然,处理的就是按行获取数据,然后将换行符替换成“,”连接的字符串,然而就再获取换行符的时候,却屡战屡败~~受挫勒~


查询网络资源,觉得下面这些说的还靠谱,跟我遇到的情况吻合度很高:


最新版本的jQuery中, text取值使用的是获得最基础的textNode的nodeValue, 也就是说, text取值和innerText取值的差异在于 nodeValue和innerText的差异:


对网页自身代码的取值 text() 返回的是1个字符char(13) 即 "\r",  innerText 返回的是2个字符char(13)+char(10) 即 "\r\n".

这里有一个诡异的问题:

当网页代码中包含一个自然换行时, text()可以取出这个换行符, 但是如果使用 innerText = innerText 赋值以后, 页面呈现没有发生任何变化, 但此时再用text()取值, 将无法得到换行符. 而使用text(text)的方式赋值后, 使用text()则可以得到换行符.

赋值呈现

1. innerText使用 \r 或者 \n 都可以产生换行效果, 但在IE8中, 连续的 \r 和 \n 会被合并为一个换行效果(这跟正统的对回车符与换行符的理解相符). 但在IE7中, 无论\r与\n如何组合, 都无法产生连续换行的效果.(我哭,我先后在IE6,IE7,IE8,火狐,搜狗,谷歌浏览器中测试,有的失败有的成功,IE里面的最纠结,不同版本的结果都不同)


并且, 使用innerText产生的换行只能单向的, 也就是说, 只能产生换行效果, 这个换行符却无法再次通过javascript捕捉到(无论innerText还是text).

2. text在IE8中, 回车符\r和换行符\n产生同等的效果换行效果, 不会被合并, 并且可以被javascript捕捉到. 不同的是 innerText对独立的\n捕捉到的是\n, 对\r\n捕捉到的是\r\n, 对独立的\r捕捉到的也是\r\n.(我相信你看到这里也快哭了.....)

这里就会产生一个问题, 标准换行应该是两个字符\r\n, 但是如果使用jQuery将这个字符串呈现在pre中, 则会产生两个换行效果(IE8). 在IE7中, \n会变成一个空格的效果.
(到这里如果你还没有哭的心思的话,那好吧~我承认你狠强大.....)
 

制表符(\t)

text方法的赋值和取值在处理制表符的时候都没有问题, 而innerText在赋值的时候则无法进行\t的赋值, 这个赋值的呈现效果将变成一个空格.再次使用innerText取回也会发现那个\t变成了char(32), 而使用text取回这个\t则会诡异得变成char(160)这么一个奇怪的值.

 

使用text还是innerText

在呈现数据的时候, 究竟使用text还是innerText, 这取决于你数据库中的换行是\r, \n还是\r\n.

值得提醒的是, 在自然提交的表单中, 表单域中的换行符是正统换行, 即每个换行(效果)提交后都是完整的两个字符\r\n.

 

另外还需要提醒各位的是, 虽然表单域在正常提交的情况下换行是\r\n, 但如果你是通过ajax提交的, 那么换行就变成\n了

因为.val()取值时, 会自动过滤掉\r字符.(对,就是这么解决的,用JQUERY统一一下不就哦了嘛!再次体会到JQUERY的强大和好用呀~~~)

 另外:

使用在JS中split();方法,IE里面得到的结果是一个数组,而在火狐里面得到的结果直接就是一个用“,”隔开的字符串。


这样,如果要统计数据量的话,貌似IE里比较方便,但是现在的系统如果不跨浏览器,那还叫网站么,哎!苦逼的程序员呀......



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值