![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
正規表現でhttp://~等の入力があった場合自動でアンカー表記し、Link表示するようにJavaScriptを組んでおります。
function autoLink(message) {
return message
.replace(
/((http|https|ftp):\/\/[\w?=&.\/-;#~%-]+(?![\w\s?&.\/;#~%"=-]*>))/g,
'<a href="javascript:void(0);" onclick="window.open(\"$1\", \"\", \"\")" target="_blank">$1</a>');
}
この結果は以下のように置換されて正常に返ってきているように見えます。
【入力】
りんく:http://www.google.com
【出力】
りんく:<a href="javascript:void(0);" onclick="window.open("http://www.google.com", "", "")" target="_blank">http://www.google.com</a>
実際はこの置換処理の後に以下のようにdiv要素に+で文字列連結しております。
msgが上記で置換したアンカータグが入るようになっています。
var messageElement = $('<div class="sendbox">' + msg + '<span class="msgToolTip">' + sendDate + '</span></div>');
このやり方でやると何故かアンカータグの中身が書き変わってしまっており、デバッガでみたところhttp://が以下のようにhttp:=""のようになったり崩れてしまっています。
<a href="javascript:void(0);" onclick="window.open(\" http:="" www.yahoo.co.jp\",="" \"\",="" \"\")"="" target="_blank">http://www.yahoo.co.jp</a>
jQueryで要素を生成しているやり方が悪いのかと思い以下のように要素生成後にhtmlでアンカーを追加しましたが駄目でした。
var messageElement = $('<div class="sendbox"></div>');
messageElement.html(msg);
解決方法等もし分かる方がいらっしゃたらご教授頂ければ幸いです。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
ざっと拝見しただけですが・・・
例えば、ご提示のautoLink関数に、引数として文字列
なんてったってhttp://www.google.comだよね
を送った場合、返される文字列は以下のようになりますよね?
なんてったって<a href="javascript:void(0);" onclick="window.open("http://www.google.com", "", "")" target="_blank">http://www.google.com</a>だよね
これって、window.openのダブルクォーテーションの中でダブルクォーテーションを使っている形となってしまっているので、ブラウザに正しく解釈されないものと推測します。
autoLinkが返す値をエスケープした文字列となるようにするか、あるいはシングルクォーテーションの形にしておけばよろしいのではないでしょうか?
例えば
return message
.replace(
/((http|https|ftp):\/\/[\w?=&.\/-;#~%-]+(?![\w\s?&.\/;#~%"=-]*>))/g,
'<a href="javascript:void(0);" onclick="window.open(\'$1\', \'\', \'\')" target="_blank">$1</a>');
とか。
No.2
- 回答日時:
Replace後の表記が間違っているせいかもしれません。
onclick="window.open("http://www.google.com", "", "")"
→二重のダブルクォーテーション
message.replace(
/((http|https|ftp):\/\/[\w?=&.\/-;#~%-]+(?![\w\s?&.\/;#~%"=-]*>))/g,
'<a href="javascript:void(0);" onclick="window.open(\"$1\", \"\", \"\")" target="_blank">$1</a>');
}
↓
message..replace(
/((http|https|ftp):\/\/[\w?=&.\/-;#~%-]+(?![\w\s?&.\/;#~%"=-]*>))/g,
'<a href="javascript:void(0);" onclick="window.open(\'$1\', \'\', \'\')" target="_blank">$1</a>');
ではどうでしょう
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- その他(プログラミング・Web制作) pythonのWebスクレイピングでfind_allだとurlがNoneに 4 2022/04/17 18:21
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- HTML・CSS CSSのホバーエフェクト 1 2023/06/19 06:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[Java] Edgeでのアドレスバー非...
-
同じページをブラウザで複数開...
-
親ウインドのASPをリロードさせ...
-
マイページはどこを開くの
-
ウインドウを毎回同じ位置、大...
-
デジタル時計の時刻合わせの方...
-
スクリプトって、何ですか?ど...
-
VBAで任意のウインドウのサイズ...
-
エクセルのシート上に別のシー...
-
リストビューをスクロールさせ...
-
別フォームから戻ったときのイ...
-
小さな表示窓の呼び方は
-
PL/Iについて、教えてください。
-
「Cancel = True」とはどういう...
-
Visual Basicから Spreadのスク...
-
子ウィンドウより親ウィンドウ...
-
Excelでワードアートや図を常に...
-
Excel VBAでの右クリックのポッ...
-
5ちゃんねる
-
PDFを(htmlのように)無限に縦...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[Java] Edgeでのアドレスバー非...
-
同じページをブラウザで複数開...
-
画面を閉じる(×ボタンやタスク...
-
window.open("about:blank")
-
ブラウザ Chromeを使っていて、...
-
閉じた後のwindow.closed検知
-
親ウインドのASPをリロードさせ...
-
呼び出されたページを閉じ、呼...
-
ツールバーやステータスバーな...
-
opener.focus();が利かない
-
window.openで子画面を開いた後...
-
サブウィンドウを常に最前面に...
-
alertの最前面表示
-
onclickでのページ内移動
-
JavaScriptでタブを閉じたい
-
子画面を自動で閉じた後、親画...
-
IE7でのwindow.openerがnullになる
-
リロードさせないワザ
-
ラジオボタンクリックでサブウ...
-
window.open()のオプション(fe...
おすすめ情報