如何用Jquery替换文本?

时间:2011-10-25 16:37:36

标签: javascript jquery jquery-selectors

我有可能通过jquery用“匿名”替换我的名字。但仍然保留我的锚标记与评论的特定链接。 我无法理解,所以我尝试删除文本并保留评论

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

但它显示了所有三个'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>

非常感谢

6 个答案:

答案 0 :(得分: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"));
});

答案 1 :(得分:3)

这个循环将解析名称,无论它是什么,并在这种情况下将其替换为anon:

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

Example

使用:

答案 2 :(得分: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));
})

答案 3 :(得分:2)

您可以通过使用以下几行Jquery来完成此操作。此解决方案将使您的锚标记按原样运行,并且您不需要知道要替换的名称。

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

EXAMPLE

答案 4 :(得分:1)

您可以匹配任何名称,并使用以下代码将其替换为“匿名”,

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

上述内容将取代“by by”和“at”之间的内容,“由xyz at发布”,“匿名发布”。

答案 5 :(得分:0)

我建议你将文本换成span并迭代它们以使用RegExp更改text():

根据您的要求查看工作示例: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);
});