2011-10-25 66 views
1

是否有可能我可以用「匿名」通過jquery替換我的名字。但仍然保留我的錨標記與評論的特定鏈接。 我無法弄清楚,所以我試圖消除文字和保持註釋以如何用Jquery替換文本?

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

,但它顯示所有三個「一」元素 在我所有的div的所有內容。

理想情況下,我只需要將名稱替換爲「匿名」即可。我的名字將永遠是不同的,所以我需要一種方法來找到名稱後「發帖者」

<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

如果要隱藏你的真實姓名,你必須調整服務器的響應。
對於視覺上的變化而已,使用下面的代碼:

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

無需jQuery的在這裏。只需使用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

這個*。*是* 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"); 

以上將取代之間的內容「,由「和」at「中的」由xyz at發佈「by」anonymous at posted by「。

+0

我認爲只需要一個空間的角色類就沒有必要了。 – 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); 
});