+ -
当前位置:首页 → 问答吧 → 请问如何高效拼接字符串???

请问如何高效拼接字符串???

时间:2009-03-24

来源:互联网

为了提高 拼接字符串 的效率,ASP.NET AJAX  提供了高效操作字符串对象的 Sys.StringBuilder类,请问,jQuery  中如何高效操作字符串?谢谢!

作者: foshan   发布时间: 2009-03-24

添加字符串使用Array的push(anyString)方法
toString使用Array的join("")方法

作者: gordianyuan   发布时间: 2009-03-24

谢谢!还有一个问题:ASP.NET AJAX 扩展了String类型的 String.format() 方法,请问在jQuery中有类似的函数吗?
例如下面的代码是在ASP.NET AJAX 客户端框架中动态生成表格的,请问如何修改成在jQuery客户端框架能应用?谢谢!
                var sb = new Sys.StringBuilder("<table id='DataTable2' cellpadding='3' cellspacing='0' border='0'>");
                sb.append("<tr><th style='width: 80px'>公司名称</th><th style='width: 50px'>姓名</th><th style='width: 100px'>职务</th><th style='width: 80px'>办公电话号码</th><th style='width: 80px'>手提电话号码</th><th style='width: 80px'>传真号码</th><th style='width: 160px'>电子邮箱</th><th style='width: 80px'>备注</th></tr>");
                for (var i = 0; i < result.rows.length; i++)
                {
                    sb.append(
                                String.format(
                                                "<tr onMouseOver='onMouseOver1(this)' onMouseOut='onMouseOut1(this)' style='background-color:FloralWhite'><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td><td>{6}</td><td>{7}</td></tr>",
                                                result.rows["sgdwmc"],
                                                result.rows.UserName,
                                                result.rows["ZhiWu"],
                                                result.rows["OfficeDianHua"],
                                                result.rows["MoveDianHua"],
                                                result.rows["ChuanZhen"],
                                                result.rows["E_mail"],
                                                result.rows["BeiZhu"]
                                              )
                            );
                }
                sb.append("</table>");
                $get("result").innerHTML = sb.toString();

作者: foshan   发布时间: 2009-03-24

改成以下的代码在jQuery客户端框架可行,不知该如何优化?
                      var strTbody = ["<table cellpadding='3' cellspacing='0' border='0'><tbody>"];
                      strTbody.push("<tr><th style='width: 80px'>公司名称</th><th style='width: 50px'>姓名</th><th style='width: 100px'>职务</th><th style='width: 80px'>办公电话号码</th><th style='width: 80px'>手提电话号码</th><th style='width: 80px'>传真号码</th><th style='width: 160px'>电子邮箱</th><th style='width: 80px'>备注</th></tr>");  
                      for (var i = 0; i < result.rows.length; i++) {
                          strTbody.push("<tr onMouseOver='onMouseOver1(this)' onMouseOut='onMouseOut1(this)' style='background-color:FloralWhite'><td>" + result.rows["sgdwmc"] + "</td><td>" + result.rows.UserName + "</td><td>" + result.rows["ZhiWu"] + "</td><td>" + result.rows["OfficeDianHua"] + "</td><td>" + result.rows["MoveDianHua"] + "</td><td>" + result.rows["ChuanZhen"] + "</td><td>" + result.rows["E_mail"] + "</td><td>" + result.rows["BeiZhu"] + "</td></tr>");
                      }
                      strTbody.push("</tbody></table>");
                      var obj = document.getElementById("tableDiv");
                      obj.innerHTML = strTbody.join("");

作者: foshan   发布时间: 2009-03-24

var str = "<table><tr><th>name</th><th>value</th><tr>";
$.each(result.rows, function(){
    str += "<tr><td>" + this.name + "</td><td>" + this.value + "</td></tr>";
});
str += "</table>";
$("#tableDiv").append(str);

几个建议
1.onMouseOver等属性不要加到html上,分离架构,可以写成
$("#tableDiv table>tr).mouseover(function(){
// do something
});

2.先不要管性能,只有确定有严重的性能问题才进行优化,这里字符链接性能应该不是问题

作者: gordianyuan   发布时间: 2009-03-24

谢谢!
str += "<tr><td>" + this.name + "</td><td>" + this.value + "</td></tr>";  这样拼接字符串的方法在别的地方看到说在大量的数据行这是效率最低、性能消耗最大的写法。而将字符串作为数组对象的方式是目前效率最高,性能最优的方式。

作者: foshan   发布时间: 2009-03-24

还有一个问题:ASP.NET AJAX 扩展了String类型的 String.format() 方法,请问在jQuery中有类似的函数吗?

作者: foshan   发布时间: 2009-03-24

写了一个扩展,不知道是不是楼主想要的效果

$.extend($, {
    stringFormat: function(str){
        for(var i = 0;i < arguments.length - 1;i++){
            str = str.replace("{" + i + "}", arguments[i+1]);
        }
        return str;
    }
});

例子

$.stringFormat("Hello {0}, {1}","foshan","welcome to here");

作者: gordianyuan   发布时间: 2009-03-24

妙!

作者: foshan   发布时间: 2009-03-24