【问题标题】:Jquery string replace not workingJquery字符串替换不起作用
【发布时间】:2011-08-12 00:44:15
【问题描述】:

这让我发疯:

// Get the comment template
var comment = $('#CommentTemplate').html();

// Delete all entered text
$("textarea#NewComment").val('');

// Get comments returned ID
var ThisCommentsID = data.substring(2, data.length);
var d = new Date();

// Replace comment variables
comment = comment.replace("{CID}", ThisCommentsID);
comment = comment.replace("{USERNAME}", CurrUsername);
comment = comment.replace("{BODY}", Message);
comment = comment.replace("{GRAV}", GravHash);
comment = comment.replace("{CLEARDATE}", GravHash);
comment = comment.replace("{ISODATE}", ISODateString(d));
comment = comment.replace("{USERURL}", RelURL + CurrUsername);

// Add it
$('#comment-total-wrap').prepend(comment);

这基本上可以 100% 正常工作,使用 AJAX 查询向列表动态添加评论,但模板上的所有值仍然以 {CID}、{GRAV} 等形式出现。它不会引发任何错误,替换不起作用。

我试过了:

comment = comment.replace("{BODY}", Message);

也是如此,但它仍然只是在输出 HTML 上显示为 {BODY}。任何帮助表示赞赏。

页面上的 HTML 模板是:

<div id="CommentTemplate" style="display:none;">
    <div id="cid{CID}" class="comment-wrapper">
        <div id="CommentHead" class="comment-head ch-highlight">
            <div class="comment-date">
                <abbr class="timeago" title="{ISODATE}" id="Timeago{CID}">{CLEARDATE}</abbr>
            </div>
            <div class="comment-author">
                Written by <a id="CommentAuthorLink" title="Visit this game makers profile" href="{USERURL}">{USERNAME}</a>
            </div>
        </div>   
        <table class="comment-body" width="100%">
            <tr>
                <td width="100" valign="top" align="center">
                    <a id="GravLink" title="{USERNAME} makes games with Construct 2" href="{USERURL}"><img id="GravatarComment" title="{USERNAME}&#39;s Gravatar" class="comment-avatar" src="http://www.gravatar.com/avatar/{GRAV}?r=pg&amp;s=80" /></a>
                </td>
                <td valign="top">
                    <div class="comment-txt">
                        {BODY}
                    </div>
                </td>
            </tr>
        </table>
        <div class="clear"></div>  
    </div>
</div>

【问题讨论】:

  • 您正在使用 str=str.replace ,因为它必须存储...最新的值。
  • 它的行为很奇怪,它可以很好地替换身体,但其他都没有。

标签: javascript jquery string replace str-replace


【解决方案1】:

你可以试试这个

comment.replace("{CID}", ThisCommentsID);

try this

comment= comment.replace(/\{CID\}/gi, ThisCommentsID);

【讨论】:

  • 不走运,似乎什么也没做,正如你所说的那样会抛出错误; expected 并用引号括起来它不执行任何替换操作
  • 完美! +1!!!!你能解释一下为什么这行得通吗?我做错了什么?
  • @Tom ,只需使用 espace 序列,我们就必须告诉字符串开始和字符串结束... \{ \} ...
  • 值得一提的是,这解决了这个问题,因为替换命令需要一个正则表达式,并且会这样处理一个字符串——对于普通字母来说,这往往工作得很好,但是花括号有正则表达式中的特殊含义。
  • 我试过这个 var output = "1{hi}2"; output.replace("{hi}", "something");它奏效了......去看看
【解决方案2】:

只需使用comment = comment.replace("{BODY}", Message); 即可。

【讨论】:

  • 它没有,这就是我问这个问题的原因:)
  • 它的行为真的很奇怪,替换了其中的一些,其他的不是:(
猜你喜欢
  • 2012-07-08
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 2016-02-15
  • 2016-10-05
  • 1970-01-01
相关资源
最近更新 更多