js實例教程-js獲取TextArea每一行字符串,包括自動換行符的解決方法

发布时间:2018-11-23 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了js實例教程-js獲取TextArea每一行字符串,包括自動換行符的解決方法脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小寶典致力於為廣大程序猿(媛)提供高品質的代碼服務,請大家多多光顧小站,小寶典在此謝過。

當TextArea開啟自動換行時,通過同步提交可以在後台獲取到自動換行符,但是如果通過js讀取進行異步提交時,卻無法獲取到自動換行符。這裡先給出兩種吊子解決方案

1 利用IE的createTextRange可以通過移動擴展光標直到內容超出TextArea寬度時結束,該方法不支持跨瀏覽器,而且在混合有手工換行時容易出錯

2 計算字符寬度,製作一張中英文以及各個特殊字符的像素寬度表,然後計算出是否超出TextArea寬度,該方法太過於複雜,個人沒有實現。

本文給出在實際應用中實現如何完美獲取TextArea的每一行數據,包括自動換行以及手動換行符,主要原理為向一個隱藏域一一追加字符,直到其寬度大於TextArea寬度為止。

<textarea id="testContentTextArea" wrap="virtual" style="width:400px;word-wrap: break-word;word-break: break-all;"/>

1:創建一個隱藏域作為寬度檢測,如span、p等。這裡以span為例:

<span id="testSpanForCheck" style=visibilITy:hidden"">

需要注意,隱藏域的屬性需要與textarea一致,並且隱藏域的寬度能夠擴展到textarea一樣寬

2 獲取textarea內容,並通過js處理,將內容分割為按行顯示,換行符用#表示,示例以jquery方式讀取為例。

第一步:讀取內容,並按照手工換行符分隔為字符串數組

&nbsp;VAR content = $("#testContentTextArea").val().split("/n");

var result="";

var contentWidth = $("#testContentTextArea").width();

$("#testSpanForCheck").text("");

第二步:檢測每一字符串內容是否超過textarea寬度,超過則追加換行。需要注意的是,innerText方法會將多個空格合併為一個,所以在追加時需要將空格轉為普通字符,如a

 $.each(content, function(i, val){       var valLength = val.length;       if(valLength == 0) {           result += "#";       } else {       <span style="white-space:PRe;"> </span>var pre = "", innerVal, tempWidth;           for(var innerI = 0; innerI < valLength; inneri++) {               innerVal = val.charAt(innerI);               if(innerVal == " ") {                   $("#testSpanForCheck").text($("#testSpanForCheck").text() + "a");  //追加字符,如果為空格則追加為a(innerText方法會將多個空格合併為一個,所以需要轉換)               } else {                   $("#tempContent").text($("#tempContent").text() + innerVal);   //非空格則直接追加               }               tempWidth = $("#testSpanForCheck").width();   //獲取添加字符后隱藏域的寬度               if(tempWidth > contentWidth) {                   result += pre;<span style="white-space:pre;">   </span>//如果追加字符后隱藏域寬度大於TextArea寬度,則表明該字符為下一行字符,                   result += "#";                   $("#testSpanForCheck").text(innerVal);                   pre = innerVal;               } else if(innerI == valLength - 1) {                   result += pre + innerVal;<span style="white-space:pre;">    </span>//最後一個字符                   result += "#";                   $("#testSpanForCheck").text("");                   pre = "";               } else {                   pre += innerVal;<span style="white-space:pre;"> </span>//依次追加到pre變量中               }                              }       }   });  

3 獲取到result,其即為包含手工以及自動換行符的數據,換行符均被轉為# 

當TextArea開啟自動換行時,通過同步提交可以在後台獲取到自動換行符,但是如果通過js讀取進行異步提交時,卻無法獲取到自動換行符。這裡先給出兩種半吊子解決方案:

1 利用IE的createTextRange可以通過移動擴展光標直到內容超出TextArea寬度時結束,該方法不支持跨瀏覽器,而且在混合有手工換行時容易出錯

2 計算字符寬度,製作一張中英文以及各個特殊字符的像素寬度表,然後計算出是否超出TextArea寬度,該方法太過於複雜,個人沒有實現。

本文給出在實際應用中實現如何完美獲取TextArea的每一行數據,包括自動換行以及手動換行符,主要原理為向一個隱藏域一一追加字符,直到其寬度大於TextArea寬度為止。

<textarea id="testContentTextArea" wrap="virtual" style="width:400px;word-wrap: break-word;word-break: break-all;"/>

1:創建一個隱藏域作為寬度檢測,如span、p等。這裡以span為例:

<span id="testSpanForCheck" style=visibility:hidden"">

需要注意,隱藏域的屬性需要與textarea一致,並且隱藏域的寬度能夠擴展到textarea一樣寬

2 獲取textarea內容,並通過js處理,將內容分割為按行顯示,換行符用#表示,示例以jquery方式讀取為例。

第一步:讀取內容,並按照手工換行符分隔為字符串數組

 var content = $("#testContentTextArea").val().split("/n");

var result="";

var contentWidth = $("#testContentTextArea").width();

$("#testSpanForCheck").text("");

第二步:檢測每一字符串內容是否超過textarea寬度,超過則追加換行。需要注意的是,innerText方法會將多個空格合併為一個,所以在追加時需要將空格轉為普通字符,如a

 $.each(content, function(i, val){       var valLength = val.length;       if(valLength == 0) {           result += "#";       } else {       <span style="white-space:pre;"> </span>var pre = "", innerVal, tempWidth;           for(var innerI = 0; innerI < valLength; innerI++) {               innerVal = val.charAt(innerI);               if(innerVal == " ") {                   $("#testSpanForCheck").text($("#testSpanForCheck").text() + "a");  //追加字符,如果為空格則追加為a(innerText方法會將多個空格合併為一個,所以需要轉換)               } else {                   $("#tempContent").text($("#tempContent").text() + innerVal);   //非空格則直接追加               }               tempWidth = $("#testSpanForCheck").width();   //獲取添加字符后隱藏域的寬度               if(tempWidth > contentWidth) {                   result += pre;<span style="white-space:pre;">   </span>//如果追加字符后隱藏域寬度大於TextArea寬度,則表明該字符為下一行字符,                   result += "#";                   $("#testSpanForCheck").text(innerVal);                   pre = innerVal;               } else if(innerI == valLength - 1) {                   result += pre + innerVal;<span style="white-space:pre;">    </span>//最後一個字符                   result += "#";                   $("#testSpanForCheck").text("");                   pre = "";               } else {                   pre += innerVal;<span style="white-space:pre;"> </span>//依次追加到pre變量中               }                              }       }   });  

3 獲取到result,其即為包含手工以及自動換行符的數據,換行符均被轉為# 

覺得可用,就經常來吧!Javascript技巧 腳本寶典 歡迎評論哦! js技巧,巧奪天工,精雕玉琢。小寶典獻醜了!

脚本宝典总结

以上是脚本宝典为你收集整理的js實例教程-js獲取TextArea每一行字符串,包括自動換行符的解決方法全部内容,希望文章能够帮你解决js實例教程-js獲取TextArea每一行字符串,包括自動換行符的解決方法所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。