//前台接收get参数值

function getQueryString(name) {
            var queryStrings = window.location.search.split('&');
            for (var i = 0; i < queryStrings.length; i++) {
                if (queryStrings[i].indexOf(name + "=") != -1)
                    return queryStrings[i].substr(queryStrings[i].indexOf(name + "=") + name.length + 1, queryStrings[i].length);
            }
            return "";
        }

//前台接收get参数值,这种实现也可以

function getQueryString(name) {
 var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
 var r = window.location.search.substr(1).match(reg);
 if (r != null) return unescape(r[2]); return null;
}

把对象转换成string,此方法名称只能为parseString,要换名称就全部替换

parseString = function (obj) {
 switch (typeof (obj)) {
  case 'string':
   //return '"' + obj.replace(/(["file://])/g, '\\$1') + '"';
   return '"' + obj + '"';
  case 'array':
   return '[' + obj.map(parseString).join(',') + ']';
  case 'object':
   if (obj instanceof Array) {
    var strArr = [];
    var len = obj.length;
    for (var i = 0; i < len; i++) {
     strArr.push(parseString(obj[i]));
    }
    return '[' + strArr.join(',') + ']';
   } else if (obj == null) {
    return 'null';

} else {
    var string = [];
    for (var property in obj) string.push(parseString(property) + ':' + parseString(obj[property]));
    return '{' + string.join(',') + '}';
   }
  case 'number':
   return obj;
  default:
   return obj;
 }
}

//利用option的text的值来默认选中某一项:

注意第一种方法有时不行,推荐第二种

1,$("#drpBrand").find("option[text='" + $("#hdBrand").val() + "']").attr("selected", true).change();
2,$("#drpBrand").find("option:contains('" + $("#hdBrand").val() + "')").attr("selected", true).change();

js中,按照值删除数组中的某个元素

Array.prototype.indexOf = function(val) {
            for (var i = 0; i < this.length; i++) {
                if (this[i] == val) return i;
            }
            return -1;
        };
        Array.prototype.remove = function(val) {
            var index = this.indexOf(val);
            if (index > -1) {
                this.splice(index, 1);
            }
        };

如:
        var array = [1, 2, 3, 4, 5];
        array.remove(3);

/// <summary>
  /// 复制对象
  /// </summary>
  /// <param name="target">目标对象</param>
  /// <param name="source">原始对象</param>
        private void TryUpdateModel(Object target, Object source)
        {
            var tprops = target.GetType().GetProperties();
            foreach (var prop in source.GetType().GetProperties())
            {
                var tprop = tprops.FirstOrDefault(p => p.Name.Equals(prop.Name));
                if (tprop == null) continue;
                tprop.SetValue(target, prop.GetValue(source, null), null);
            }
        }

/// <summary>
  /// 注册前台脚本
  /// </summary>
  /// <param name="scriptName">前台脚本变量名</param>
  /// <param name="scriptValue">脚本Json对象</param>
  protected void RegisterScript(string scriptName, object scriptValue)
  {
   var json = string.Format("{0}={1};", scriptName, JsonHelper.JsonSerialize(scriptValue));
   ClientScript.RegisterClientScriptBlock(typeof(string), scriptName + "json", json, true);
  }

//将[{name:'name1',value:'value1'}]转换为{'name1':'value1'}
function fixData(d) {
    var ndata = {};
    for (var i in d) {
        ndata[d[i].name] = d[i].value;
    }
    return ndata;
}

//限制某个文本框只能输入数字,无法输入字母

$('#dvMain').find(".memPhoneSearch input")
    .keypress(function (e) {
        var chars = "0123456789";
        var chr = String.fromCharCode(e.charCode == undefined ? e.keyCode : e.charCode);
        return e.ctrlKey || e.metaKey || (chr < ' ' || chars.indexOf(chr) > -1);
    })

打开的pop窗口随着鼠标点击的dom元素而定位展示的js代码:

e是click事件,o是pop窗口的宽度或高度,

eventX = function (e, o) {
  e = e || window.event;
  o = o || 0;
  x = e.pageX || e.clientX + document.body.scroolLeft;
  return x + o > screen.availWidth ? screen.availWidth - o : x - o / 2 < 0 ? 0 : x - o / 2;
 }

eventY = function (e, o) {
  e = e || window.event;
  o = o || 0;
  alert('clientY = ' + e.clientY);
  y = e.pageY || e.clientY + document.body.scrollTop;
  return y + o > screen.availHeight ? screen.availHeight - o : y - o / 2 < 0 ? 0 : y - o / 2;
 }

一个button不在某个form内,点击该button时提交某个form的代码:

//e.preventDefault()可以不要

$("dvMain").find(".btnMemSearch").click(function (e) { e.preventDefault(), $(".memPhoneSearch form").submit() });

异步ajax方法封装(post传值,参数和返回值都是json形式):

注意一点:前端利用此方法异步调用后台WebService中的方法时,后台返回前台的Json字符串是有长度限制的,如果后台返回的Json字符串过长系统是会报错的,此时应在后台的web.config中的根节点下(即configuration节点内部)添加以下配置节点即可解决,当然具体返回的字符串的长度可以根据实际情况进行配置:

<system.web.extensions> 
    <scripting> 
      <webServices> 
        <jsonSerialization maxJsonLength="1024000000" /> 
      </webServices> 
    </scripting> 
</system.web.extensions>

ajax = function (uri, data, callback) {
 $.ajax({
  type: "post",
  cache: false,
  url: uri,
  data: data,
  dataType: "json",
  contentType: "application/json",
  success: callback,
  error: function (res) { alert(res) }
 });
}

使用此方法调用webservice后台方法 实例(注意 res.d):

前台:

ajax("/Web/WebService/CorseListService.asmx/GetCorseList", parseString({ CourseType: $("#ddlCourseType").val(), ClassID: $(this).val() }),
                    function (res) {
                        var data = eval("(" + res.d + ")");
                        //var data = $.parseJSON(res.d);
                        bindSelect("ddlCourse", data);
                        courseLoaded = true;
                    });

后台方法:

[WebMethod(EnableSession = true)]
    public string GetCorseList(string CourseType, string ClassID) {
        string result = "";
        string where = " DataState=1 and ClassTypeID = " + CourseType;
        if (ClassID != "-1")
        {
            List<ClassInfo> lc = ciMan.GetModelList("ID=" + ClassID);
            if (lc != null && lc.Count > 0)
            {
                where += "  and JobTypeID=" + lc[0].JobTypeId;
            }
        }
        List<NewAddCourse> adc = nacMan.GetModelList(where);
        result = JsonConvert.SerializeObject(adc.Select(o => new { Display = o.CourseName, Value = o.Id }).ToList());
        return result;
    }

传递对象的例子:

前台:

var item = {
                    Id: $("#hfItemID").val(),
                    SchoolId: $("#<%= ddlSchoolName.ClientID %>").val(),
                    ClassId: $("tr.trHide").is(":hidden") ? "-1" : $("#<%= ddlClass.ClientID %>").val(),
                    CourseId: $("#ddlCourse").val(),
                    TeacherId: $("tr.trHide").is(":hidden") ? "-1" : $("#<%= ddlTeacher.ClientID %>").val(),
                    Classroom: $("tr.trHide").is(":hidden") ? "-1" : $("#<%= ddlRoom.ClientID %>").val(),
                    CourseType: $("#ddlCourseType").val(),
                    StartTime: $("#txtStartDate").val(),
                    EndTime: $("#txtEndDate").val(),
                    StartTimeType: ($("#chkAllDay").attr("checked") ? 0 : $("#ddlStartType").val()),
                    EndTimeType: ($("#chkAllDay").attr("checked") ? 0 : $("#ddlEndType").val()),
                    ClassName: $("tr.trHide").is(":hidden") ? "-1" : $("#<%= ddlClass.ClientID %> option:selected").text(),
                    TeacherName: $("tr.trHide").is(":hidden") ? "-1" : $("#<%= ddlTeacher.ClientID %> option:selected").text(),
                    ClassroomName: $("tr.trHide").is(":hidden") ? "-1" : $("#<%= ddlRoom.ClientID %> option:selected").text(),
                    CourseName: $("#ddlCourse option:selected").text(),
                    Year: $("#hfYear").val()
                };

ajax("/Web/WebService/CorseListService.asmx/ModifyCorse", parseString({ timeItem: item }),
                    function (res) {
                        var data = eval("(" + res.d + ")");
                        if (data.result == 1) {

$("#btnCommit").attr("disabled", false);
                            $("#btnCommit").show();

if (item.Id == 0) {
                                calendar.fullCalendar('renderEvent',
                                    data.item,
                                    true // make the event "stick"
                                );
                            }
                            else if (item.Id > 0)
                            {
                                var event = $('#calendar').fullCalendar('clientEvents', item.Id)[0];
                                //event = data.item;
                                //event.id = timeItem.Id;
                                event.title = data.item.title;
                                event.start = data.item.start;
                                event.end = data.item.end;
                                event.allDay = data.item.allDay;
                                event.courseType = data.item.courseType;
                                event.courseID = data.item.courseID;
                                event.classID = data.item.classID;
                                event.classRoomID = data.item.classRoomID;
                                event.teacherID = data.item.teacherID;
                                event.startType = data.item.startType;
                                event.endType = data.item.endType;
                                event.backgroundColor = data.item.backgroundColor;
                                event.year = data.item.year;
                                calendar.fullCalendar('updateEvent', event);
                            }

close();
                        }
                        else {
                            alert(data.item);
                        }
                    });

后台被调用方法:

[WebMethod(EnableSession = true)]
    public string ModifyCorse(NewTimetableMore timeItem)
    {
        UserInfo user = new UserInfo();
        if (Session["UserBase"] != null)
        {
            user = (UserInfo)Session["UserBase"];
        }
        string result = JsonConvert.SerializeObject(new { result = 0, item = "保存失败,请稍后重试!" });
        if (timeItem != null)
        {
            bool flag = false;
            CalendarItem calendar = new CalendarItem();
            timeItem.UpdateDate = DateTime.Now;
            timeItem.UpdateId = user.Id;
            //如果选择的是开始时间的上午和结束时间的下午就按照全天写入DB
            if (timeItem.StartTimeType == 1 && timeItem.EndTimeType == 2)
            {
                timeItem.StartTimeType = 0;
                timeItem.EndTimeType = 0;
            }
            //如果是新增记录,则使用当前年份
            if (timeItem.Id == 0)
            {
                timeItem.Year = timeItem.Year ?? System.DateTime.Now.Year;
            }
            timeItem.LengthTime = GetSingleCourseLengTime(timeItem.StartTime, timeItem.StartTimeType, timeItem.EndTime, timeItem.EndTimeType);
            //检查该课程的排课时长是否允许添加该排课
            double LeaveTime = nTm.GetCourseTimeLeaveTime(timeItem.SchoolId, (timeItem.Year ?? 0), timeItem.ClassId, timeItem.CourseId, timeItem.CourseType, timeItem.Id);
            if (LeaveTime < timeItem.LengthTime)
            {
                result = JsonConvert.SerializeObject(new { result = 0, item = (LeaveTime > 0 ? string.Format("该课程剩余时长为 {0} 天,请缩短排课天数!" , LeaveTime) : "该课程排课时间已满,无法再添加课程时长!") });
                return result;
            }

if (timeItem.Id == 0)
            {
                timeItem.DataState = 1;
                timeItem.CreateDate = DateTime.Now;
                timeItem.CreateId = user.Id;
                NewTimetable DBTimeItem = new NewTimetable();
                TryUpdateModel(DBTimeItem, timeItem);
                int TimeID = nTm.Add(DBTimeItem);
                if (TimeID > 0)
                {
                    flag = true;
                    timeItem.Id = TimeID;
                }
            }
            else if (timeItem.Id > 0)
            {
                var item = nTm.GetModel(timeItem.Id);
                item.SchoolId = timeItem.SchoolId;
                item.CourseType = timeItem.CourseType;
                item.CourseId = timeItem.CourseId;
                item.ClassId = timeItem.ClassId;
                item.Classroom = timeItem.Classroom;
                item.TeacherId = timeItem.TeacherId;
                item.StartTime = timeItem.StartTime;
                item.EndTime = timeItem.EndTime;
                item.EndTimeType = timeItem.EndTimeType;
                item.StartTimeType = timeItem.StartTimeType;
                item.LengthTime = timeItem.LengthTime;
                item.UpdateDate = timeItem.UpdateDate;
                item.UpdateId = timeItem.UpdateId;
                flag = nTm.Update(item);
            }

if (flag)
            {
                calendar.id = timeItem.Id;
                calendar.title = GetTitleMoreInfo(timeItem);
                calendar.start = timeItem.StartTime.ToString("yyyy-MM-dd");
                calendar.end = timeItem.EndTime.ToString("yyyy-MM-dd");
                //calendar.allDay = (timeItem.StartTimeType == 0 && timeItem.EndTimeType == 0);
                calendar.allDay = true;
                calendar.courseType = timeItem.CourseType;
                calendar.courseID = timeItem.CourseId;
                calendar.classID = timeItem.ClassId;
                calendar.classRoomID = timeItem.Classroom;
                calendar.teacherID = timeItem.TeacherId;
                calendar.startType = timeItem.StartTimeType;
                calendar.endType = timeItem.EndTimeType;
                calendar.backgroundColor=BackGroundColorList[timeItem.CourseType - 1];
                calendar.year = timeItem.Year;
                result = JsonConvert.SerializeObject(new { result = 1, item = calendar });
            }
        }
        return result;
    }

向后台方法传递参数是数组时的实例:

前台:

相当于调用时参数形式为:CustomerID=1001&CustomerID=1002&CustomerID=1003这种形式可以调用后台参数为string[] CustomerID的参数
此处前台之所以用escape方法,是因为Content参数是html代码,后台接受时用Content = Server.UrlDecode(Content);解密获取参数。

var val = [];
                $(".scrollBox2b li.cur").each(function () {
                    //$(this).hasClass("cur") && val.push($(this).attr("data-cid"));
                    val.push($(this).attr("data-cid"));
                })

if (val.length > 0) {
                    $.get("@Url.Action("MailContentMode")", function (data) {
                        var MailContent = data.replace("$EmailContent$", $("#calcResult").html());
                        var param = "CustomerID=" + val.join("&CustomerID=") + "&Subject=" + escape(escape("房贷计算结果")) + "&Content=" + escape(escape(MailContent));
                        $.post("@Url.Action("SendEmail")", param, function (data) {
                            alert(data.msg);
                        })
                    })
                }
                else {
                    alert("请至少选择一个客户!");
                }

后台被调方法:

public ActionResult SendEmail(Guid[] CustomerID, string Subject, string Content)
        {
            string Msg = "发送失败,请稍后重试!";
            int result = 0;
            Subject = Server.UrlDecode(Subject);
            Content = Server.UrlDecode(Content);
   var Customers = new CustomerService().Filter(p => CustomerID.Contains(p.ID)).ToList();
            Customers = Customers.Where(p=>p.Email.IsEmail()).ToList();
            var mail = new FocusEmail
            {
                Subject = Subject,
                Body = Content,
                IsBodyHtml = true
            };
            List<FocusReceiver> Receivers=new List<FocusReceiver>();
            foreach (var cus in Customers)
            {
                Receivers.Add(
                    new FocusReceiver
                    {
                        Email = cus.Email,
                        FullName = cus.Name
                    }
                );
            }
            if (Receivers.Count() > 0)
            {
                if (Email.Send(mail, Receivers.ToArray()).ToLower() == "success")
                {
                    Msg = "发送成功";
                    result = 1;
                }
                else
                {
                    Msg = "发送失败,请稍后重试!";
                    result = -1;
                }
            }
            else
            {
                Msg = "发送失败,没有有效的邮箱";
                result = -2;
            }
            return Json(new { result = result, msg=Msg });
        }

再如:

前台:
var cid = [], rid = [], fid = $("#FID").val();
  $(".data_distribution_table tbody :checkbox[name=cid]:checked").each(function () { cid.push($(this).val()) })
  $(".label_w :checkbox[name=rid]:checked").each(function () { rid.push($(this).val()) })
  if (!$(".table_d").hasClass("disabled")) {
   $.post("@Url.Action("Alloc")", "cid=" + cid.join("&cid=") + "&rid=" + rid.join("&rid="), function (res) {
    alertE(res.msg);
   })
  }

后台:
public ActionResult Alloc(Guid[] cid, Guid[] rid)
  {
   var cl = cid.Length;//客户数
   var rl = rid.Length;//顾问数
   var size = cl / rl;//每人分配数
   var lft = cl % rl;//剩余未分配数
   var offset = 0;
   var ser = new CustomerService();
   var iser = new ImportCustomerService();
   for (var i = 0; i < rl; i++)
   {
    List<Guid> lcid = new List<Guid>(size);
    for (var j = 0; j < size; j++)
    {
     var idx = i * size + j + offset;
     if (cl > idx) lcid.Add(cid[idx]);
    }
    if (i < lft)
    {
     var idx = (i + 1) * size + offset;
     offset++;
     if (cl > idx) lcid.Add(cid[idx]);
    }
    var trid = rid[i];
    ser.Update(p => lcid.Contains(p.ID), p => new Customer { RealtorID = trid });
   }
   foreach (var item in iser.Filter(p => p.Customer.Any(x => cid.Contains(x.ID))).Select(p => new { p.ID, Cnt = p.Customer.Count(x => x.RealtorID.HasValue) }).ToList())
   {
    var iid = item.ID;
    var icnt = item.Cnt;
    iser.Update(p => p.ID == iid, p => new ImportCustomer { DistributionRate = icnt });
   }
   return Json(new { success = true, msg = "分配成功" }, JsonRequestBehavior.AllowGet);
  }

js绑定select:

bindSelect = function (selectid, jsondata) {
    addSelectNullItem(selectid);
    for (var item in jsondata) {
        addSelectItem(selectid, jsondata[item].Display, jsondata[item].Value);
    }
}

addSelectItem = function (selectid, text, value) {
    $("#" + selectid + "").append("<option value='" + value + "'>" + text + "</option>");
}

addSelectNullItem = function (selectid) {
    $("#" + selectid + "").empty();
    $("#" + selectid + "").append("<option value='-1'>--请选择--</option>");
}

//加载类别信息
    function tmpSmsLoadCategory(data) {
        var c = $('#selectID').html('');
        for (var i in data) {
            $('<option></option>').text(data[i].ExtValue).val(data[i].ExtCode).appendTo(c);
        }
    }

// 对Date的扩展,将 Date 转化为指定格式的String  
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,  
// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)  
// 例子:  
// (new Date()).format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423  
// (new Date()).format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18  
Date.prototype.format = function (fmt) { //author: meizz  
 var o = {
  "M+": this.getMonth() + 1,                 //月份  
  "d+": this.getDate(),                    //日  
  "h+": this.getHours(),                   //小时  
  "m+": this.getMinutes(),                 //分  
  "s+": this.getSeconds(),                 //秒  
  "q+": Math.floor((this.getMonth() + 3) / 3), //季度  
  "S": this.getMilliseconds()             //毫秒  
 };
 if (/(y+)/.test(fmt))
  fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
 for (var k in o)
  if (new RegExp("(" + k + ")").test(fmt))
   fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
 return fmt;
}

JS常用方法总结,及jquery异步调用后台方法实例的更多相关文章

  1. asp.net如何在前台利用jquery Ajax调用后台方法

    一 :最近因为帮同事开发项目使用到了asp.net,而我又想实现Ajax异步请求....从网上查询了一下资料之后,原来在asp.net中利用Ajax调用后台方法同样很简单,为了便于自己以后查看,特将此 ...

  2. jquery + ajax调用后台方法

    前台js: var parameter = ""; $.ajax({ type: "POST", //提交方式 url: "Default.aspx/ ...

  3. jQuery同步/异步调用后台方法

    $.ajax({ type: "Post", url: "UserManage.aspx/SubmitPage",//页面/方法名 data: "{' ...

  4. 前台JS(Jquery)调用后台方法 无刷新级联菜单示例

    前台用AJAX直接调用后台方法,老有人发帖提问,没事做个示例 下面是做的一个前台用JQUERY,AJAX调用后台方法做的无刷新级联菜单 http://www.dtan.so CasMenu.aspx页 ...

  5. jQuery调用后台方法

    前台: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.as ...

  6. Ajax - 异步调用后台程序 -JSON

    在ASP.NET使用ajax时基本上每个操作都要新建一个.ashx处理程序,页面很多,每个页面的操作也很多,这样的话项目就会产生新建很多很多的.ashx页面,能不能把方法写在后台中,然后Jquery直 ...

  7. Asp.net中JQuery、ajax调用后台方法总结

    通过上一篇文章实例的实现,整个过程当中学习到很多知识点,了解了Jquery.Ajax在asp.net中的运用,加以总结,其实原理都是一样的,理解了一种,其他的注意很少的区别就可以了.灵活运用: 1.有 ...

  8. js调用后台方法(如果你能容忍执行的后台方法变成一个常量)

    最近一直在做一个电话拨号的系统,系统不大,但是做的时间有点长了.其中用到了一个技术:js调用后台方法.解决这个问题花了不少时间,现如今仍然还有些不明白的地方,今天跟大家分享一下.真正明白的同学欢迎指正 ...

  9. AJAX JQuery 调用后台方法返回值(不刷新页面)

    AJAX JQuery 调用后台方法返回值(不刷新页面) (1)无参数返回值(本人亲试返回结果不是预期结果) javascript方法: $(function () {             //无 ...

随机推荐

  1. POJ - 3249 Test for Job (DAG+topsort)

    Description Mr.Dog was fired by his company. In order to support his family, he must find a new job ...

  2. 怎么样cocos2d-x正在使用ECS(实体-包裹-制)建筑方法来开发一款游戏?

    简介 在我的博客,我翻译的几篇文章ECS文章.这些文章都是从Game Development站点.假设你对这个架构方式还不是非常了解的话.欢迎阅读理解 组件-实体-系统和实现 组件-实体-系统. 我发 ...

  3. cnBlog 的windows live writer 客户端配置

    重装系统后总是忘,备个档 CNBLOG 博客名 cnblog 日志帐户 http://www.cnblogs.com/liulaocai2/ 用户:359444066 密码:同QQ密码,比QQ少一位 ...

  4. 从头开始建网站(三)DNS

    前面介绍了站点搭建所须要的两大要素:域名和server,这次要说的是域名解析,也就是把域名和server进行绑定的过程. 我们在訪问网络时,网址会被发送到DNSserver,然后由DNSserver返 ...

  5. Java下拼接执行动态SQL语句(转)

    在实际业务中经常需要拼接动态SQL来完成复杂数据计算,网上各类技术论坛都有讨论,比如下面这些问题: http://bbs.csdn.net/topics/390876591 http://bbs.cs ...

  6. 【iOS发展-61】更换plist经过资源,执行iOS一旦数据仍显示在模拟器的外观,如何解决?

    (1)案例介绍 --我们首先导入plist文件做项目,模拟的观看效果. --删除plist,更换一个新的plist,CMD+R模拟执行,或者找到该程序界面上显示最后一个数据. (2)原因 是由于第一次 ...

  7. Android - 分享内容 - 接收其他APP的内容

    就象程序可以发送数据给其他程序,所以也可以接收其他程序的数据.想一下用户如何和程序交互,以及想从其他程序接收什么样类型的数据.例如,一个社交程序可能对接收其他程序的文字(比如有趣的网址)感兴趣.Goo ...

  8. 【C语言探索之旅】 第一部分第七课:循环语句

    内容简介 1.课程大纲 2.第一部分第七课: 循环语句 3.第一部分第八课预告: 第一个C语言小游戏 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编 ...

  9. DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢,而是说操作了这个对象后,会触发一些浏览器行为(转)

    一直都听说DOM很慢,要尽量少的去操作DOM,于是就想进一步去探究下为什么大家都会这样说,在网上学习了一些资料,这边整理出来. 首先,DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢 ...

  10. C++它tinyXML使用

    tinyXML一个非常好的操作C++图书馆,文件不大,但方法非常丰富.和apache的Dom4j能够披靡啊! 习惯了使用java类库的我看到这么丰富的c++类库,非常高兴!它使用非常easy.仅仅须要 ...