【问题标题】:Why does jQuery templates add double quotes to some strings为什么 jQuery 模板会在某些字符串中添加双引号
【发布时间】:2011-12-02 15:23:30
【问题描述】:

背景

我正在使用 jQuery 模板、ASP.Net MVC Razor 视图和 Twitter。

问题

使用带有一些字符串的 jQuery 模板会自动导致这些字符串被包裹在 "

详情

我创建了一个如下所示的 jQuery 模板:

<script id="twitterResultsTemplate" type="text/x-jquery-tmpl">
        <div class="tweetItem">
            <div class="userAvatar"><img src="${profile_image_url}" alt="${from_user} Image" /></div>
            <div class="tweetSummary">
                <div class="bd">before ${text.parseUserName().parseHashTag()} after</div>
                <div>${created_at}</div>
                <div class="ft">${prettyDate(created_at)}</div>
            </div>
        </div>        
        <br style="clear: both;" />
</script>

以下 javascript 格式化用户名和哈希标签

String.prototype.parseUsername = function () {
    return this.replace(/[@]+[A-Za-z0-9-_]+/g, function (u) {
        var username = u.replace("@", "")
        return u.link("http://twitter.com/" + username);
    });
};

String.prototype.parseHashtag = function () {
    return this.replace(/[#]+[A-Za-z0-9-_]+/g, function (t) {
        var tag = t.replace("#", "%23")
        return t.link("http://search.twitter.com/search?q=" + tag);
    });
};

不幸的是,正在发生的事情是文本被包含在双引号中。所以,

我期望得到的是:

<div>before @user Hello World #hello #world after</div>

相反,我得到的是:

<div>"before @user Hello World #hello #world after"</div>

为什么会自动插入双引号?更重要的是,我该如何预防或修复它?

更新

我已经确定只有当@ 包含在文本中时才会发生这种情况。 . .每当包含用户名时都会发生这种情况。

解决方案

我不确定为什么这个解决方案有效,但确实有效。当我对问题有了更好的理解后,我会更新这篇文章。

更改(不起作用)

<div class="bd">before ${text.parseUserName().parseHashTag()} after</div>

致:(作品)

<div class="bd">before {{html text.parseUserName().parseHashTag()}} after</div>

【问题讨论】:

  • 我无法重现该效果。检查jsfiddle.net/FloydPink/gRxyC/1/embedded/result - 您能否发布有关您使用的版本以及您的代码的更多详细信息?
  • 其实在你的网站上就可以看到效果了:jsfiddle.net/c5H3A/2
  • “我英俊的宝贝 Tony Bennett 的专辑 DUETS II 排名第一!太高兴了!这是我们歌曲 THE LADY IS A TRAMP 的视频:t.co/v9bXj5QH”——它带有引号
  • 使用 Google 的开发者工具检查时,li 元素内的所有文本都用引号括起来。
  • 谢谢。我刚刚添加了它。但是,SO 会让您等待 2 天,然后再将您自己的答案标记为已接受的答案。

标签: jquery asp.net-mvc google-chrome jquery-templates double-quotes


【解决方案1】:

我不确定为什么这个解决方案有效,但确实有效。当我对问题有了更好的理解后,我会更新这篇文章。

更改(不起作用)

<div class="bd">before ${text.parseUserName().parseHashTag()} after</div>

致:(作品)

<div class="bd">before {{html text.parseUserName().parseHashTag()}} after</div>

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 1970-01-01
    • 2011-11-28
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    相关资源
    最近更新 更多