dポイントプレゼントキャンペーン実施中!

javascriptで、「@」の後ろを自動でリンク化したいです。

ある文字列があったとします。
<span class="auto">@ほげほげ</span>

これを、自動的に(class=autoがついている範囲の場合は)、
<a href="http://hoge.com/hoge.php?=ほげほげ">@ほげほげ</a>
というリンクがつくようにしたいです。
phpに渡すクエリには、@はつけたくないですが、見た目のリンクは@を含めるようにしたいです。
(区切りはスペースまで)

http://~
に関しては以下のページが参考になりました。
http://www.openspc2.org/JavaScript/Ajax/jQuery_p …
同じようなことを @~ でやりたいという意味になります。

よろしくお願いします。

A 回答 (4件)

こんな漢字でしょうかね・・・



<!DOCTYPE html>
<meta charset="UTF-8">
<title></title>
<body>

<p>
<span>aaa</span>
<span class="auto">@bbb</span>
<span class="auto">ccc@ddd</span>
<span class="test1 auto test1">@eee</span>
<span class="auto">fff</span>
<span>@ggg</span>
</p>
<script>

var a = document.createElement ('a');
a.appendChild (document.createTextNode (''));

Array.prototype.slice.call (document.getElementsByClassName ('auto'), 0)
   .forEach (
    function (e) {
     var t = e.textContent;
     var c = this.cloneNode (true);

     c.href = (0 === t.indexOf ('@'))
     ? 'http://hoge.com/hoge.php?name=' + encodeURIComponent (t.substring (1))
     : t;
    
     c.firstChild.data = t;
     e.parentNode.replaceChild (c, e);
    }, a);

</script>
    • good
    • 0

こんなかんじでしょうかねぇ・・・



<script>
window.onload=function(){
replace_atmark();
}
function replace_atmark(){
var nodes=document.getElementsByTagName("span");
var reg=new RegExp("(^| )auto( |$)","i");
for(var i=0;i<nodes.length;i++){
var n=nodes[i];
var v=n.childNodes[0].nodeValue;
if(n.className
&& n.className.match(reg)
&& v.indexOf("@")==0
){
var newNode=document.createElement("a");
newNode.setAttribute("href","ttp://hoge.com/hoge.php?="+v.substr(1));
newNode.appendChild(document.createTextNode(v));
n.parentNode.insertBefore(newNode,n);
n.parentNode.removeChild(n);
}
}
}

</script>
<p>
<span>aaa</span>
<span class="auto">@bbb</span>
<span class="auto">ccc@ddd</span>
<span class="test1 auto test1">@eee</span>
<span class="auto">fff</span>
<span>@ggg</span>
</p>

この回答への補足

ありがとうございます。
仰る方法で実現できました。

ただ、大変申し訳ございません、
参考サイト:
http://www.openspc2.org/JavaScript/Ajax/jQuery_p …
と同じく、
http://~
の場合は、通常のリンク、
@ほげほげ
の場合は、
http://hoge.com/hoge.php?name=ほげほげ
へのリンク、ということにしたいのですが、どうしたらよいでしょうか。
つまり、http://~と@~の場合でリンクを変えたいです。そこがうまくできませんでした。

よろしくお願いいたします。

補足日時:2013/02/08 22:12
    • good
    • 0

参照サイトはjQueryを利用して解説しているようなので、jQueryを利用しています。




(全角空白は半角に)
$(function(){
 var baseURL = "http://hoge.com/hoge.php?=";
 $("span.auto").each(function(){
  $("<a></a>").html(this.innerHTML)
   .attr("href", baseURL + encodeURIComponent(this.innerHTML.replace(/^\@/, "")))
   .replaceAll(this);
 });
});

この回答への補足

ありがとうございます。

大変申し訳ございません、
参考サイト:
http://www.openspc2.org/JavaScript/Ajax/jQuery_p …
と同じく、
http://~
の場合は、通常のリンク、
@ほげほげ
の場合は、
http://hoge.com/hoge.php?name=ほげほげ
へのリンク、ということにしたいのですが、どうしたらよいでしょうか。
つまり、http://~と@~の場合でリンクを変えたいです。

よろしくお願いいたします。

補足日時:2013/02/08 22:12
    • good
    • 0

仮に「ほげほげ」のようなマルチバイト文字の場合、エンコードしないと


不正なリンクになりますがよろしいのでしょうか?
またクラスautoのspanの中に別のタグがないことは保証されているのでしょうか?

この回答への補足

encodeURI() でエンコードしたいと思いますが。

クラスautoのspanの中に別のタグはありません。

よろしくお願いします。

補足日時:2013/02/08 19:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!