tetsunosukeのnotebook

tetsunosukeのメモです

textarea要素の半角スペースを全角スペースに変換っ

半角スペースは\x20, 全角スペースは\u3000で対応
半角のまま投稿すると削除されちゃってすごく見にくいシステムがあるじゃないですか(mixiとか)。はてなのプレ記法大好きな自分としてはあの手のシステムは困ったもんだと思っているんですが、とりあえずこういうスクリプトレット(っていうの?)を作ってみた。

FirefoxだとinnerHTMLじゃなくてinnerContentだとか若干改造の余地とかあるケド。

function hspace2z()
{
  var textAreaElement = document.getElementById("textarea_body");

  var lines;
  var tmpStr = "";
  // 連続するスペースの正規表現
  var reg = new RegExp("^(\x20+)","g");

  // textareaの文字列を改行区切りで一行ごとに読み込む
  lines = textAreaElement.innerText.split("\n");
  for(var i = 0; i < lines.length; i++){
    var spaces = 0;
    // 
    lines[i].match(reg);
    // 取得した半角スペース分だけ全角スペースを足す
    spaces = RegExp.$1.length;
    var str = "";
    for(var l = 0; l < spaces; l++){
      str += "\u3000";
    }
    // マッチした部分の置き換え
    lines[i] = lines[i].replace(reg, str);

    tmpStr += lines[i];
  }

  // 生成した文字列でinnerTextを上書き
  textAreaElement.innerText = tmpStr;
}

とりあえずブックマークレット的に。

<a href="javascript:var p='';var r=new RegExp('^(\x20+)','g');var l=document.getElementById('textarea_body').innerText.split('\n');for(var i=0;i<l.length;i++){var s=0;l[i].match(r);s=RegExp.$1.length;var t='';for(var j=0;j<s;j++){t+='\u3000'}l[i]=l[i].replace(r,t);p+=l[i];} document.getElementById('textarea_body').innerText=p;void(null)">Replace!</a>