2011-10-25 2 views
1

jqueryで自分の名前を "anonymous"に置き換えることは可能でしょうか?まだアンカータグにはコメントへのリンクが付いています。 私はので、私は、テキストを削除し、Jqueryでテキストを置き換えるには?

$('div.entryFooter').replaceWith($('div.entryFooter a')); 

とのコメントを維持しようとしたが、それは私のdiv要素のすべてのすべての3「」の要素 からすべてのコンテンツを示した。それを把握できませんでした。

理想的には、名前を「anonymous」に置き換えるだけです。私の名前はいつも、私は

<div class="entryFooter">Posted by mjroodt at 24/10/2011 11:48<a href="/BlogPage.aspxid=20396&blogid=58906">Comments (1)</a></div> 

<div class="entryFooter">Posted by mjroodt at 27/10/2011 13:33<a href="/BlogPage.aspx?id=12396&blogid=58945">Comments (2)</a></div> 

<div class="entryFooter">Posted by mjroodt at 27/10/2011 15:59<a href="/BlogPage.aspx?id=14396&blogid=59963">Comments (7)</a></div> 

感謝

+1

あなたは、元のHTMLソースを表示すると、まだ単に原作者を明らかにするという事実を知っていますか? – pimvdb

+0

@pimvdb、はい私は元の著者が元のHTMLソースから見えるが、残念ながら私はクライアント側にしかアクセスできないことに気づいています。 – mjroodt

答えて

2

これは、以下の数行のJqueryを使用して行うことができます。このソリューションでは、アンカータグがそのまま動作し、置き換えようとしている名前を知る必要はありません。

$('.entryFooter').each(function(){ 
    var html_arr = $(this).html().split(' '); 
    html_arr[2] = 'anonymous'; 
    $(this).html(html_arr.join(' ')); 
}); 

EXAMPLE

+0

これは完璧であり、皆様のおかげで皆様に感謝しています。 – mjroodt

2

あなたがあなたの本当の名前を隠したい場合は、サーバーの応答を調整する必要があるが、「投稿者」の後に名前を見つけるための方法が必要に異なるものになります。ここではjQueryのための

var name = "mjroodt"; 
var replaceBy = "anonymous"; 

//Generate a replace-all pattern 
var pattern = new RegExp(name.replace(/([[^$.|?*+(){}])/g, '\\$1'), 'g'); 

//Loop through each `div.entryFooter` element 
$("div.entryFooter").each(function(){ 
    var $this = $(this); 
    var text = $this.text(); 
    //Check if the name exists. Otherwise, ignore 
    if(text.indexOf(name) == -1) return; 
    $this.text(text.replace(pattern, replaceBy)); 
}) 
4

必要がありません:視覚的な変化のために
は、以下のコードを使用します。ただ、Javascriptのreplace([substring], [newstring])機能を使用します。

var value = $(".div.entryFooter").text().replace("James Johnson", "Anonymous"); 

は、これが唯一の視覚表示のためであることに留意すべきです。名前がまったく表示されないようにするには、サーバーまたはデータベースレベルで名前を解析する必要があります。

$(".div.entryFooter").each(function(){ 
    $(this).text($(this).text().replace("James Johnson", "Anonymous")); 
}); 
+2

Um..that *は* jQueryです。編集:まあ、実際には、jQueryはDOMからノードを取得するためにのみ使用されます。 – JCOC611

+2

'replace'関数はそうではありません。とにかく –

+0

笑、とにかく、いい仕事、+1: – JCOC611

3

このループは、それはあるかもしれないものは何でも、名前を解析し、この場合の匿名のと交換します:使用

$('div').each(function() { 
    var $this = $(this), 
    text = $this.text(), 
    name = text.match(/Posted by (.+) at .+/)[1] 
    $this.text(text.replace(name, 'anon')) 
}); 

Example

1

次の方法で「

text.replace(/by[ ][a-zA-Z0-9]*[ ]at/,"by anonymous at"); 

上記の間でコンテンツを交換するだろう、任意の名前を一致し、 "匿名" 以下のコードを使用して、それを置き換えることができます匿名で投稿された "でxyzで投稿された"文の "at"になります。

+0

私は1つのスペースの文字クラスは必要ないと思います。 – pimvdb

0

私は正規表現で)スパンにテキストを折り返すと(テキストを変更するためにそれらを反復処理することができことをお勧めしたい:

はあなたの要求のための作業例を参照してください。http://jsfiddle.net/mikhailov/ypRsP/

HTML

<div class="entryFooter"> 
    <span>Posted by mjroodt at 24/10/2011 11:48</span> 
    <a href="/BlogPage.aspxid=20396&blogid=58906">Comments (1)</a> 
</div> 

<div class="entryFooter"> 
    <span>Posted by mjroodt at 27/10/2011 13:33</span> 
    <a href="/BlogPage.aspx?id=12396&blogid=58945">Comments (2)</a> 
</div> 

<div class="entryFooter"> 
    <span>Posted by mjroodt at 27/10/2011 15:59</span> 
    <a href="/BlogPage.aspx?id=14396&blogid=59963">Comments (7)</a> 
</div> 

JS

$('.entryFooter span').each(function(){ 
    var that = $(this); 
    var content = that.text(); 
    var t = content.replace(/^Posted by [A-Za-z]+/, "Posted by Anonymous"); 
    that.text(t); 
}); 
関連する問題