javascript - 求大神写个类似于JQ的serialize的方法
天蓬老师
天蓬老师 2017-04-11 09:40:39
[JavaScript讨论组]

我传一个URL和一个form表单元素。生成一个带参数的URL。。。。。。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(1)
怪我咯

仿照着jq写了一个,用法一样的。

function serialize(a, traditional) {
  var prefix, s = [];

  if ('[object HTMLFormElement]' === Object.prototype.toString.call(a)) a = a.childNodes;

  if (["[object Array]", "[object NodeList]"].indexOf(Object.prototype.toString.call(a)) >= 0) {
    Array.prototype.forEach.call(a, function(v) {
      if (!v.name || v.disabled) return;
      if ((v.type === 'radio' || v.type === 'checkbox') && !v.checked) return;
      add(v.name, v.value);
    });
  } else {
    for (prefix in a) buildParams(prefix, a[prefix], traditional, add);
  }

  return s.join("&");

  function add(key, valueOrFunction) {
    var value = typeof valueOrFunction === 'function' ? valueOrFunction() : valueOrFunction;
    s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value == null ? "" : value);
  }

  function buildParams(t, e, n) {
    var r;
    if ("[object Array]" === Object.prototype.toString.call(e)) {
      Array.prototype.map.call(e, function(e, r) {
        o(t + "[" + ("object" == typeof e && null !== e ? r : "") + "]", e, n)
      });
    } else if ("[object Object]" === Object.prototype.toString.call(e)) {
      for (r in e) buildParams(t + "[" + r + "]", e[r], n);
    } else {
      n(t, e);
    }
  }
}

测试,点开看效果:
https://jsfiddle.net/ztv676p1/

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号