質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

2647閲覧

ラジオボタン直後の文字列をlabelで括りたい

castail

総合スコア117

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2015/10/06 04:37

ラジオボタン直後の文字列をlabelタグで括りたいです。

具体的には、jqueryで動的に以下のように修正したいです。

[修正前]

lang

1<div class="hoge"> 2 <input name="name1" type="radio">ラジオ1 3 <input name="name1" type="radio">ラジオ2 4 <input name="name1" type="radio">ラジオ3 5 <p>・・・・</p> 6 <div>・・・・・・・・</div> 7 <input name="name2" type="radio">ラジオ1 8 <input name="name2" type="radio">ラジオ2 9 <input name="name2" type="radio">ラジオ3 10</div>

[修正後]

lang

1<div class="hoge"> 2 <label><input name="name1" type="radio">ラジオ1</label> 3 <label><input name="name1" type="radio">ラジオ2</label> 4 <label><input name="name1" type="radio">ラジオ3</label> 5 <p>・・・・</p> 6 <div>・・・・・・・・</div> 7 <label><input name="name2" type="radio">ラジオ1</label> 8 <label><input name="name2" type="radio">ラジオ2</label> 9 <label><input name="name2" type="radio">ラジオ3</label> 10</div>

ご教授の程よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

・対象範囲内は1タグ1行の記述構成になっていて最後が改行されている
という前提で[修正後]のイメージとなるよう力技でやってみました

javascript

1function addLabelTag() 2{ 3 var str = $(".hoge").html(); // htmlを取り出す 4 var strElms = str.split("\n"); // 改行で分割 5 str = ""; 6 for( i=0; i<strElms.length; i++ ){ 7 if( strElms[i].indexOf("input") != -1 ){ // input タグを対象に 8 strElms[i] = strElms[i].replace(/^\s+/g, ""); // inputタグの前の余白をカット 9 strElms[i] = "<label>" + strElms[i] + "</label>"; // 前後に label タグを付加 10 } 11 str += strElms[i] + "\n"; // 末尾に改行を付加して全体htmlに結合 12 } 13 $(".hoge").html(str); // htmlを戻す 14 15 alert( $(".hoge").html() ) // 確認 16}

できないことはない、ということで、、、

投稿2015/10/07 01:36

takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

castail

2015/10/07 08:43

せっかく検証頂いたのに誠に恐縮ですが、先にご回答頂いた「NIA」様をベストアンサーに選ばせていただきました。 こちらの内容も参考にさせて頂きます。 この度はご回答ありがとうございました。
guest

0

ベストアンサー

ラベルをクリックで反応させるということでしょうか?

HTML

1 <label for="r1" ><input name="name1" type="radio" id="r1">ラジオ1</label> 2 <label for="r2" ><input name="name2" type="radio" id="r2">ラジオ2</label>

対応が出来るようになりますが、質問内容を誤解していたらすいません。

=====================================================
スーパー簡易的で質問内容のパターンしか成功してないので、
テストは必要ですが、下記が参考になればと思います。

HTML

1<!DOCTYPE> 2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> 3<head> 4<title>JS正規表現</title> 5<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no" /> 6<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 7<script type='text/javascript'> 8;$(function() 9{ 10 var hogehtml = $(".hoge").html(); 11 $(".hoge").html(hogehtml.replace(/<input(.*)type="radio"(.*)>(.*)/gm,'<label><input$1type="radio"$2>$3</label>')); 12 13}); 14</script> 15</head> 16<body> 17 18<div class="hoge"> 19 <input name="name1" type="radio">ラジオ1 20 <input name="name1" type="radio">ラジオ2 21 <input name="name1" type="radio">ラジオ3 22 <p>・・・・</p> 23 <div>・・・・・・・・</div> 24 <input name="name2" type="radio">ラジオ1 25 <input name="name2" type="radio">ラジオ2 26 <input name="name2" type="radio">ラジオ3 27</div> 28 29</body> 30</html>

投稿2015/10/06 04:45

編集2015/10/06 05:40
NIA

総合スコア181

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

castail

2015/10/06 04:47

ご回答ありがとうございます。 「 <input name="name1" type="radio">ラジオ1」というラジオボタンとプレーンの文字列をlabelでくくる方法をご教授いただければと思います。 説明がわかりにくく申し訳ございません。
NIA

2015/10/06 05:21

誤解してしまいすいません。 この内容で括るとなると、JQueryでタグを一つ一つループして識別しながらタグ追加するより正規表現による置換の方が良いかと思います。
NIA

2015/10/06 06:18

回答内容の正規表現では、「<input name="name1" type="radio">ラジオ3<p>・・・・</p>」のようなパターンが対応できないので、一度改行でタグを整える処理を置換前に行うか正規表現の改良が必要になります。
castail

2015/10/07 08:40

ご回答頂きありがとうございます。 今回のケースではご教示頂いたままで思い通りの内容で実現できました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問