保留sprintf输出的主要空白的最有效方法

时间:2011-12-28 01:35:15

标签: javascript jquery printf

鉴于以下代码有效:

for (i=0; i<nLinears; i++) {
    for (j=0; j<nLinearPts[i]-1; j++) {
        $wb.upLinearLoad.append('<div>' + sprintf("%5s%8.1f to%7.1f%8.1f"
        ,sLinearSegName[i][j],fLinearPtBA[i][j],fLinearPtBA[i][j+1],fLen)
        .replace(/ /g,"&nbsp;"));
    }
}

这确保了当数字从较小(更多前导空格)变为较大(较少前导空格)时,将保持列间距。但是,据我所知,使用.replace的正则表达式效率不高,而且由于我在整个应用程序中都有这种结构,所以我需要让它尽可能快地运行。

我相信jQuery .text()会照顾我的需要,但我还需要.append().text()结果,我无法弄清楚如何让它们一起工作。

任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:0)

您可以put these in <pre> elements而不是重复字符串替换&nbsp;

这将(通常)使用固定宽度的字体格式化它们并保留空格而无需任何额外的工作。 <pre>用于预先格式化的文本,这对您所拥有的内容有意义。

如果这不能很好地完成并且你需要替代方案,你可以check out this question about how to use pre-formatted text in different contexts

答案 1 :(得分:0)

您可以更新sprintf()函数,以便首先输出不间断的空格。

但是你真的发现了使用正则表达式.replace()的性能问题吗?我不认为你会有问题。鉴于您似乎有表格数据,为什么不使用<table>?这就是表的用途。

答案 2 :(得分:0)

我查看了sprintf(),发现一个简单的单语句更改产生了我需要的东西:

pad_character = '&nbsp;';

感谢sprintf()实现的作者使用有意义的变量名。