2011-10-25 42 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); 
});