• ベストアンサー

文字列の改行を自動化したい

文字列の改行を自動化したいのですが、textareaないのテキストで改行したいところをクリックすると、改行できるようにすることはできますか? javascriptでブラウザ上で行おうと思っています。 無理な場合は選択してエンターを押しまくるのが大変なのでせめてサブライムのように 改行したいところを一括選択してエンター一回でできるようにできないでしょうか? いつもサブライムで行うのですが面倒なので、rextareaないでサブライムのように一括置換や一括削除などもできると便利です。 もちろんメーラにそのような機能があったり、そのようなサービスがあればそれでも構わないので教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • ballville
  • ベストアンサー率47% (233/487)
回答No.1

「表示」ボタンを押したあと、ブラウザの地の画面に出てくるテキストの文字をクリックすると改行します。「出力」ボタンを押すと、改行の入ったテキストがテキストエリアに出力されます。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>test</title> </head> <body> <textarea>ここに文章を入力してください</textarea> <button>表示</button> <button>出力</button> <textarea id="out" readonly></textarea> <div id="disp"></div> <script type="text/javascript"> var strArray; function addCR( obj ){ id =obj.id; strArray[ id - 0 ]+='\r\n'; alert(obj.parentNode.outerHTML) obj.innerHTML+='<br>'; } function disp(){ var str=document.getElementsByTagName('textarea')[0].value; strArray=str.split(''); var div =document.getElementById('disp'); div.innerHTML=''; var aProto =document.createElement('a'); for( var i =0, len=strArray.length; i<len; i++ ){ var a =aProto.cloneNode(1); a.onclick=function(){ addCR(this); } a.innerText=strArray[ i ]; a.id =i div.appendChild(a); } } function output(){ var outText =document.getElementsByTagName('textarea')[1]; outText.value =strArray.join("") } document.getElementsByTagName('Button')[0].onclick=function(){ disp() } document.getElementsByTagName('Button')[1].onclick=function(){ output() } </script> </body> </html>

okweb12345
質問者

お礼

https://codepen.io/anon/pen/KvoRGJ に再現しましたが何も起きません。

okweb12345
質問者

補足

ありがとうございます。 確かにできているのですが、なぜ、クリックすると改行するのでしょうか? クリックイベントの際にbrをその左右の文字の入れているのでしょうか?

その他の回答 (4)

  • ballville
  • ベストアンサー率47% (233/487)
回答No.5

>変数A += 変数Bは、変数A = 変数B+変数Aなので、 違います。 変数A += 変数Bは、変数A = 変数A+変数Bです。 変数A、変数Bの中身が数値なら、変数A+変数Bも 変数B+変数Aも同じ値になりますが、この場合文文字列なので同じになりません。 たとえば、 var a='A'; var b='B'; のとき a+bは文字列'AB'、b+aは’BA’となります。 >初心者なのでソースだけではわかりません 言葉(自然言語)で説明したのでは、おばかなコンピュータは理解できません。そこで、コンピュータに理解できるよう、あいまいな解釈が生じない、これ以上ないほど分かりやすく説明するための記述法としてプログラム言語(今の場合はjavascript)が生まれました。  なので、コンピュータになった気分で「ソース百遍意自(おの)ずから通ず」と熟読すれば分かるはずです。行数も短いですから。  いや、見ただけでは分からない、と思ったら次を読んでください。 >もう少し具体的に何をやっているか ソースが出ているので、自分でいじり回せば、具体的な動きが分かるはずです。現在のソースは、クリックした場所で改行しているのですが、クリックした文字をカッコでくくるにはソースのどこをどうすればいいかなど、あれこれ自分でやってみるのが具体的な動きを理解する一番の早道です。  okweb12345 さんが、参考サイトとしてあげたCodepenでは、そんな実験・トライアンドエラーが簡単にできるようです。ぜひ、チャレンジしてください。

  • ballville
  • ベストアンサー率47% (233/487)
回答No.4

表示の方はおっしゃる通り、後ろにbrタグを付加しています。 一方、文字配列の方は当該する文字の後ろに'\r\n'を加えています。 addCR関数中のalertのコメントを外すと、わかりやすいかもしれません。 数十行のソースなので、理解するのは難しくないと思います。

  • ballville
  • ベストアンサー率47% (233/487)
回答No.3

OKwaveの仕様なのか、タブスペースが反映されません。なので、var、functionなどの後ろのタブが消えてしまっています。コピペの際、注意してください。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>test</title> </head> <body> <textarea>ここに文章を入力してください</textarea> <button>表示</button> <button>出力</button> <textarea id="out" readonly></textarea> <div id="disp"></div> <script type="text/javascript"> var strArray; function addCR( obj ){ id=obj.id; strArray[ id - 0 ]+='\r\n'; //alert(obj.parentNode.outerHTML) obj.innerHTML+='<br>'; } function disp(){ var str=document.getElementsByTagName('textarea')[0].value; strArray=str.split(''); var div=document.getElementById('disp'); div.innerHTML=''; var aProto=document.createElement('a'); for( var i =0, len=strArray.length; i<len; i++ ){ var a=aProto.cloneNode(1); a.onclick=function(){ addCR(this); } a.innerText=strArray[ i ]; a.id=i div.appendChild(a); } } function output(){ var outText=document.getElementsByTagName('textarea')[1]; outText.value=strArray.join("") } document.getElementsByTagName('Button')[0].onclick=function(){ disp() } document.getElementsByTagName('Button')[1].onclick=function(){ output() } </script> </body> </html>

参考URL:
https://codepen.io/anon/pen/xLWmZv
  • ballville
  • ベストアンサー率47% (233/487)
回答No.2

varキーワード、functionキーワード等の後ろのタブスペースが消えてしまったようです。コピペする際、ご注意ください。

okweb12345
質問者

お礼

>>> functionaddCR( obj ){ id=obj.id; strArray[ id - 0 ]+='\r\n'; alert(obj.parentNode.outerHTML) obj.innerHTML+='<br>'; } 恐らくここで、テキストをクリックしたとき、クリックした場所で改行されるようですが、もう少し初心者にわかるように解説いただけませんか? これは何を再代入しているのですか? id=obj.id; 変数A += 変数Bは、変数A = 変数B+変数Aなので、 配列になにかしているのですか? strArray[ id - 0 ]+='\r\n'; なぜこれでクリックしたところにbrがつくのでしょうか? obj.innerHTML+='<br>';

okweb12345
質問者

補足

初心者なのでソースだけではわかりません。 もう少し具体的に何をやっているか教えていただければ幸いです。

関連するQ&A

  • フォーム テキストエリアの自動改行

    <textarea>の属性、wrapを使用して、 テキストエリアの文を自動改行しています。 ですが、半角文字の羅列のみ、 operaやFirefoxなどのブラウザでは 自動改行ができません。 半角文字も他のブラウザで 自動改行する方法はないのでしょうか?

    • ベストアンサー
    • HTML
  • 文末の改行コードを削除したい

    メールフォームにて、テキストエリアの文末に無意識で改行(Enter)を連打する人がいます。 それを、送信するまでにjavascript等で削除してしまいたいと考えています。 textarea の onBlur で関数を動かし、文中の改行は残しつつ文末の改行(複数の場合あり)を削除したいです。 どなたかご教授ください。

  • 複数のファイル 改行が入った文字列の一括変換

    改行が入って複数行にわたる文字列を 複数のファイルを対象にして 一括変換するツールは ありませんでしょうか。 一行だけの文字列では 「ファイルから置換」を使っているのですが、 複数行を対象にした置換をする方法がわからないのです。

  • メール文の途中自動改行について

    WIN VISTAでWINDOWSメールを使用しています。  メール文を作成する際に、長い文章をそのままで送っても、受け取り側において読み易いように自動改行してくれません。そこで改行させたい位置でENTERキーで行っていますが、自動改行させたいと思います。  設定は、ツール → オプション → (タブ)送信 で、メール送信の形式をテキスト形式を選択し、テキスト形式の設定の中で、「送信時の自動的に文字列を折り返す」においてデフォルトのままの「76」になっています。  英文で入力すると単語の切れ目で改行してくれますが、和文章では改行してくれず、画面いっぱいの見にくい長い表示になってしまいます。解決策はあるでしょうか。それとも日本語には対応していないでしょうか。

  • エクセル セルの中の改行を消すには?

    エクセルで、分からないことがあります。 Alt+改行で、セルの中に改行を入れているのですが、 ある列のみ選択して、改行を一括で消す、あるいは スペース1マスに置換することは可能でしょうか? ご存じの方、よろしくお願い致します。

  • 改行を認識できる&ハイパーリンクができるテキスト

    何度もすみません。 以前の教えて!で、テキストにハイパーリンクを貼る方法について記述してあったのですが、レイヤーの使いかたなどがよくわかりませんでした。 現在、TextAreaを使用しているのですが、この中にhttp://から始まる文字列がある場合、自動リンクをはりたいです。改行も認識できなければならないので、TextAreaしか思い浮かばないのですが・・・ 何か別のタグをご存知でしょうか?

  • 文字+改行コードの置換について

    文字+改行コードの置換についてご教授ください。 テキスト内の数字「9」とそれに続く改行コードのみ置換(削除)対象にしています。 全ての改行コードが対象ではないため、下記のようにエディタ(sakuraエディタ)で指定しました。 置換前: 9\r\n ※削除したいため、置換後の欄は空欄にしています。 しかし、この設定だと置換前の文字列を置換対象として認識しません。(検索対象としても) \r\n だけだと改行コードを認識するので、文字と改行コードのセットを認識していないようです。 指定に誤りがあるのでしょうか。詳しい方ご教授お願いします。

  • 自動改行タグの挿入

    フリーの改造OKなCGIを改造していますが、上手く行きません。 <textarea name=com cols="70" rows="10" wrap="OFF"></textarea> 上記のタグで入力したテキストの末尾に、自動で改行タグを付けて $com に渡してデータ保存をしたいのですが、なかなか上手く行き ません。どの様な記述をすればよいでしょうか? ご指導宜しくお願い致します。

    • ベストアンサー
    • Perl
  • エクセルで、「セル内改行」を自動化したいのですが・・・。

    今回もお世話になります。 今回の目的ですが、作業の自動化、 もしくは、簡略化にあります。 例えば、以下の様な文字列の書かれた テキストファイルがあるとします。 あああああああああああ。 ああああ、ああああああ、ああああああああああ。 あああああ、ああああああ。 あああああああああああ。 これをこのまま読み込むと、 一行目:A1 二行目:A2 という感じで読み込まれます。 これ自体は、全然問題ないのですが、 その後に、セル内改行(Alt+Enter)を手作業で入れ、 文章を整えているのですが、非常に時間が掛かります。 これをマクロなどで簡略化できるか 調べているのですが、良い方法が見つかりません。 そこで、テキストエディターで、 セル内改行と解釈してくれる記号を埋め込み、 エクセル側で、セル内改行に変換できないだろうかと、 思いつきました。 次のようなイメージです。 ("\n"を、セル内改行文字と仮定します。) あああああああああああ。 ああああ、\nああああああ、\nああああああああああ。 あああああ、\nああああああ。 あああああああああああ。 これを読み込んだら、"\n"の位置で セル内改行が入ったら便利かと・・・。 このやり方以外でも構いませんので、 何か良い方法は無いのでしょうか!? ちなみに、作成したい数は、 大体50ファイル位です。 テキストファイルを 特定のルールに沿ったエクセルに変える作業です。 PC環境は、 OS:Windows XP Home Edition ソフト:Excel 2000,WZ_EDITOR です。 よろしくお願いします。

  • EXCELで"-"で勝手に自動改行してしまう

    EXCEL2003で半角"-"または、半角のスペースでセル内で勝手に自動改行してしまいます。セルの設定は、Wrap Textがチェックされています。"-"や半角スペースで勝手に改行させたくないのですが、どのようにしたらよいでしょうか。ALT+ENTERで手動改行以外の方法をお願いします。

専門家に質問してみよう