js常用代码

1、获取URL的各个属性值:域名,查询字符串等
      //分析url
        function parseURL(url) {
            var a = document.createElement("a");
            a.href = url;
            return {
                source: url,
                protocol: a.protocol.replace(":", ""),
                host: a.hostname,
                port: a.port,
                query: a.search,
                params: (function () {
                    var ret = {},
                seg = a.search.replace(/^\?/, "").split("&"),
                len = seg.length, i = 0, s;
                    for (; i < len; i++) {
                        if (!seg[i]) { continue; }
                        s = seg[i].split("=");
                        ret[s[0]] = s[1];
                    }
                    return ret;

                })(),
                file: (a.pathname.match(/\/([^\/?#]+)$/i) || [, ""])[1],
                hash: a.hash.replace("#", ""),
                path: a.pathname.replace(/^([^\/])/, "/$1"),
                relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [, ""])[1],
                segments: a.pathname.replace(/^\//, "").split("/")
            };
        }

        //替换myUrl中的同名参数值
        function replaceUrlParams(myUrl, newParams) {
            /*
            for (var x in myUrl.params) {
            for (var y in newParams) {
            if (x.toLowerCase() == y.toLowerCase()) {
            myUrl.params[x] = newParams[y];
            }
            }
            }
            */

            for (var x in newParams) {
                var hasInMyUrlParams = false;
                for (var y in myUrl.params) {
                    if (x.toLowerCase() == y.toLowerCase()) {
                        myUrl.params[y] = newParams[x];
                        hasInMyUrlParams = true;
                        break;
                    }
                }
                //原来没有的参数则追加
                if (!hasInMyUrlParams) {
                    myUrl.params[x] = newParams[x];
                }
            }
            var _result = myUrl.protocol + "://" + myUrl.host + ":" + myUrl.port + myUrl.path + "?";

            for (var p in myUrl.params) {
                _result += (p + "=" + myUrl.params[p] + "&");
            }

            if (_result.substr(_result.length - 1) == "&") {
                _result = _result.substr(0, _result.length - 1);
            }

            if (myUrl.hash != "") {
                _result += "#" + myUrl.hash;
            }
            return _result;
        }

        //辅助输出
        function w(str) {
            document.write(str + "");
        }

        var myURL = parseURL("http://abc.com:8080/dir/index.html?id=255&m=hello#top");
        w("myUrl.file = " + myURL.file)     // = "index.html"
        w("myUrl.hash = " + myURL.hash)     // = "top" 
        w("myUrl.host = " + myURL.host)     // = "abc.com"
        w("myUrl.query = " + myURL.query)    // = "?id=255&m=hello"
        w("myUrl.params = " + myURL.params)   // = Object = { id: 255, m: hello } 
        w("myUrl.path = " + myURL.path)     // = "/dir/index.html" 
        w("myUrl.segments = " + myURL.segments) // = Array = ["dir", "index.html"]
        w("myUrl.port = " + myURL.port)     // = "8080" 
        w("myUrl.protocol = " + myURL.protocol) // = "http" 
        w("myUrl.source = " + myURL.source)   // = "http://abc.com:8080/dir/index.html?id=255&m=hello#top"

        var _newUrl = replaceUrlParams(myURL, { id: 101, m: "World", page: 1, "page": 2 });

        w("新url为:")
        w(_newUrl); //http://abc.com:8080/dir/index.html?id=101&m=World&page=2#top
 
2、动态加载JS方法
var loadJs = function(url, callback) {
  var script = document.createElement('script');
  script.type = 'text/javascript';
  if (callback)
   script.onload = script.onreadystatechange = function() {
    if (script.readyState && script.readyState != 'loaded' && script.readyState != 'complete') return;
    script.onreadystatechange = script.onload = null;
    callback();
   };
  script.src = url;
  document.getElementsByTagName('head')[0].appendChild (script);
 }

posted @ 2011-03-17 13:34  polymorphic  阅读(202)  评论(0编辑  收藏  举报