• ベストアンサー

URL変更

HTTPリクエストを送信するのにホスト名を変更させたいです。 <a href="http://sample1.jp/test.html">test</A> フォームなどからsample2やsample3と入力すと、上記のsample1が それぞれに置き換わるようにするにはどうしたら良いでしょうか?

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.5

#1です。 ><div>の外にある3つのリンクは何でしょうか? ご質問文からでは、HTML内の全てのリンクタグを対象にしてよいのか不明でしたので、対象としないものがあることを想定して、指定した<div>内のものだけ置き換える機能としました。<div>外のものは置き換えられないことの確認のために追記したものです。 (どうやら、その必要はなさそうですね。) >sample1→sample2に変更したあと、sample2→sample3は出来るでしょうか? 可能ですが、文字列変換に正規表現を使用していると、入力される文字列に特定の記号が含まれるとエラーを起こす可能性があるので、それを回避しようとすると少々面倒なことになります。 補足を読んでいると、どうやら置き換えたい箇所が決まっているようなので、最初のものを保持しておいて複製を常に表示するというような方法で行えばよろしいかと… 置き換えるのは最初の(ドメイン部分の)「sample1」限定にしています。 正規表現を使ってないので、特殊文字のリスクは少なくなります。 (どうやら、replaceで文字列指定にしてもダメなケースがありそう…) イベントのキャッチは、onblurがよいのかonmouseoutがよいのか…(それぞれ効かないパターンがある)、あるいはonkeyupにしちゃうのか…(レスポンスにタイムラグがある)、イマイチいいのがみつからなかった。 とりあえず、何回でも変更可能な例として… <html> <head> <title></title> <script type="text/javascript"> function chgurl(val){ var trg = document.getElementById('_target'); var org = document.getElementById('target'); if (!trg) { trg = document.createElement('DIV'); trg.setAttribute('id','_target'); trg.innerHTML = org.cloneNode(true).innerHTML; org.parentNode.insertBefore(trg,org); org.style.display = 'none'; } if(val){ trg.innerHTML = org.innerHTML; var i = -1, a = trg.getElementsByTagName('A'); while (a[++i]) a[i].href = a[i].href.replace('sample1',val); } } </script> </head> <body> <input type="text" onmouseout="chgurl(this.value);"> <div id="target"> <a href="http://sample1.jp/one.html">one</A> <a href="http://sample1.jp/two.html">two</A> <a href="http://sample1.jp/three.html">three</A> </div> </body> </html> ><div>内にあるテキストのsample1も変更させる事は出来るでしょうか? 同じような要領でやれば可能です。丁度良い課題になるのでは?

maki12
質問者

お礼

#4でも出来ていましたが、「http://」から最初の/まで置換しているので 変えたくない所まで変わっているのが見つかりました。 この記述で試した所、最初に「sample1」があるところだけ変わってくれるので これで望む事が出来ました。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.4

yyr446です。 次のようにしました。 ただしテキストボックスに入力する文字列に'.'が含まれると だめです。後は正規表現の使い方で悩んで下さい。 <head> <title></title> <script type="text/javascript"> function chglink(value){ if(value){ var targets =document.getElementsByTagName("A"); for(var i=0;i<targets.length;i++){ var str=targets[i].getAttribute("href"); if(str.match(/^http:\/\/(.*?)\./g)){ target_str = RegExp.$1; targets[i].setAttribute("href",str.replace(target_str,value)); } } } } </script> </head> <body> <input type="ttext" onmouseout="chglink(this.value);"> <a href="http://sample1.jp/one.html">one</A> <a href="http://sample1.jp/two.html">two</A> <a href="http://sample1.jp/three.html">three</A> </body>

maki12
質問者

お礼

(/^http:\/\/(.*?)\./g) 上記を下記で出来ました。 (/^http:\/\/(.*?)\//g)

maki12
質問者

補足

ありがとうございます。 階層が深いと最後の/まで変わってしまうようです。 <a href="http://sample1.jp/ext/etc/two.html">two</A> 最初の/までの間だけというのは出来るのでしょうか?

すると、全ての回答が全文表示されます。
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

要件に不明確な部分があります。 <選んだだけでジャンプするのではなく置き換えるだけにしたいです。> テキストボックスで入力した値に置き換えるとして (1)テキストボックスの値を変更した場合、さらに置き換えるのですか? 最初AAAと入力すれば"sample1.jp/test.html"が"AAA.jp/test.html" になり、さらにBBBと打ちかえれば"BBB.jp/test.html"としたいのですか? (2)タイミングは? テキストボックス入力に対してリアルタイムに変更するのですか? それとも、ボタンか何かをクリックすれば変更するでよいのですか

maki12
質問者

補足

ありがとうございます。 #2の補足にも書きましたが、(1)はそのようにしたいです。 (2)は(1)が可能ならリアルタイムで行いたいです。

すると、全ての回答が全文表示されます。
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

#1です。 >選んだだけでジャンプするのではなく置き換えるだけにしたいです。 要領の例として挙げたつもりです。そのままの例が見つからなかったというのもありますが… javascript利用だと、オフにしているユーザの場合機能しないということになりますが、それでもよければ。 id:targetの<div>内にあるリンクタグのリンク先のアドレスの単純な置き換えのサンプルです。 「sample1」に一致する部分を<input>タグ部に入力した値に置き換えます。(正しいアドレスかどうかなどのチェックは一切していません) <html> <head></head> <body> <input type="text" id="inp_box" value=""> <button onclick="(function() { var i = -1, v = document.getElementById('inp_box').value; var a = document.getElementById('target').getElementsByTagName('A'); while (a[++i]) a[i].href = a[i].href.replace(/sample1/g,v); })()">入替え</button> <hr> <div id="target"> <a href="http://sample1.jp/one.html">one</a> <a href="http://sample1.jp/two.html">two</a> <a href="http://sample1.jp/three.html">three</a> <a href="http://sample1.jp/sample1.html">test</a> </div> <p> <a href="http://sample1.jp/one.html">one</a> <a href="http://sample1.jp/two.html">two</a> <a href="http://sample1.jp/three.html">three</a> </body> </html>

maki12
質問者

補足

ありがとうございます。 sample1からsample2にボタンひとつで全て変更できました。 <div>の外にある3つのリンクは何でしょうか? ページ内の全てのリンクを<div>内に入れましたが、<div>の外にも同じリンクが必要なのでしょうか? sample1→sample2に変更したあと、sample2→sample3は出来るでしょうか? sample1から変わった後の任意の文字に対して出来ない場合は 一度ページを更新して元のsample1に戻すしかしかないでしょうか? <div>内にあるテキストのsample1も変更させる事は出来るでしょうか?

すると、全ての回答が全文表示されます。
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

javascriptでしょかねぇ。 セレクトボックスの選択内容に応じてリンクする例。 http://www.tagindex.com/javascript/link/select1.html http://www.interq.or.jp/japan/webhouse/java/tip11_a.html textボックスでも同様に可能ですが、入力値のチェックとかいろいろ必要になると思われます。

maki12
質問者

お礼

<a href="http://sample1.jp/one.html">one</A> <a href="http://sample1.jp/two.html">two</A> <a href="http://sample1.jp/three.html">three</A> 上記のように複数あり、sample1の箇所のみ変更させたいです。

maki12
質問者

補足

ありがとうございます。 選んだだけでジャンプするのではなく置き換えるだけにしたいです。 テキストボックスではどうやるのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A