• jQuery 获取 URL信息


     jQuery获取URL信息有很多方法,但是使用这个插件就非常爽了。

      托管地址在:http://github.com/allmarkedup/jQuery-URL-Parser

    复制代码
                //  http: //localhost:19090/home/index?id=1
                var source = $.url.attr("source");      //  http://localhost:19090/home/index?id=1
                var protocol = $.url.attr("protocol");      //  http    全部可选值http, https, file, etc
                var path = $.url.attr("path");          //  /home/index
                var host = $.url.attr("host");          //  localhost
                var port = $.url.attr("port");          //  19090
                var relative = $.url.attr("relative");  //  /home/index?id=1
                var directory = $.url.attr("directory");//  /home/index
                
                //  http://localhost:19090/floder/index.html?id=1
                var file = $.url.attr("file");          //  index.html
                var query = $.url.attr("query");        //  id = 1  这个还可以调用  .param() 
                
                
                var id = $.url.param("id");             //  1;
                var segment = $.url.segment(1);        // 0:floder 1:index.html
    
                //也可以指定其他URL
                var setUrlAnchor = $.url.setUrl("http://www.baidu.com/#logo").attr("anchor");   //  此时setUrlAnchor与上面示例的 $.url同样调用处理喊出
    复制代码

       jQuery.URL.Parse源代码如下:

    复制代码
    // JQuery URL Parser
    // Written by Mark Perkins, mark@allmarkedup.com
    // License: http://unlicense.org/ (i.e. do what you want with it!)
    
    jQuery.url = function() {
        var segments = {};
    
        var parsed = {};
    
        /**
        * Options object. Only the URI and strictMode values can be changed via the setters below.
        */
        var options = {
    
            url: window.location, // default URI is the page in which the script is running
    
            strictMode: false, // 'loose' parsing by default
    
            key: ["source", "protocol", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "query", "anchor"], // keys available to query 
    
            q: {
                name: "queryKey",
                parser: /(?:^|&)([^&=]*)=?([^&]*)/g
            },
    
            parser: {
                strict: /^(?:([^:/?#]+):)?(?://((?:(([^:@]*):?([^:@]*))?@)?([^:/?#]*)(?::(d*))?))?((((?:[^?#/]*/)*)([^?#]*))(?:?([^#]*))?(?:#(.*))?)/,  //less intuitive, more accurate to the specs
                loose: /^(?:(?![^:@]+:[^:@/]*@)([^:/?#.]+):)?(?://)?((?:(([^:@]*):?([^:@]*))?@)?([^:/?#]*)(?::(d*))?)(((/(?:[^?#](?![^?#/]*.[^?#/.]+(?:[?#]|$)))*/?)?([^?#/]*))(?:?([^#]*))?(?:#(.*))?)/ // more intuitive, fails on relative paths and deviates from specs
            }
    
        };
    
        /**
        * Deals with the parsing of the URI according to the regex above.
        * Written by Steven Levithan - see credits at top.
        */
        var parseUri = function() {
            str = decodeURI(options.url);
    
            var m = options.parser[options.strictMode ? "strict" : "loose"].exec(str);
            var uri = {};
            var i = 14;
    
            while (i--) {
                uri[options.key[i]] = m[i] || "";
            }
    
            uri[options.q.name] = {};
            uri[options.key[12]].replace(options.q.parser, function($0, $1, $2) {
                if ($1) {
                    uri[options.q.name][$1] = $2;
                }
            });
    
            return uri;
        };
    
        /**
        * Returns the value of the passed in key from the parsed URI.
        * 
        * @param string key The key whose value is required
        */
        var key = function(key) {
            if (jQuery.isEmptyObject(parsed)) {
                setUp(); // if the URI has not been parsed yet then do this first...    
            }
            if (key == "base") {
                if (parsed.port !== null && parsed.port !== "") {
                    return parsed.protocol + "://" + parsed.host + ":" + parsed.port + "/";
                }
                else {
                    return parsed.protocol + "://" + parsed.host + "/";
                }
            }
    
            return (parsed[key] === "") ? null : parsed[key];
        };
    
        /**
        * Returns the value of the required query string parameter.
        * 
        * @param string item The parameter whose value is required
        */
        var param = function(item) {
            if (jQuery.isEmptyObject(parsed)) {
                setUp(); // if the URI has not been parsed yet then do this first...    
            }
            return (parsed.queryKey[item] === null) ? null : parsed.queryKey[item];
        };
    
        /**
        * 'Constructor' (not really!) function.
        *  Called whenever the URI changes to kick off re-parsing of the URI and splitting it up into segments. 
        */
        var setUp = function() {
            parsed = parseUri();
    
            getSegments();
        };
    
        /**
        * Splits up the body of the URI into segments (i.e. sections delimited by '/')
        */
        var getSegments = function() {
            var p = parsed.path;
            segments = []; // clear out segments array
            segments = parsed.path.length == 1 ? {} : (p.charAt(p.length - 1) == "/" ? p.substring(1, p.length - 1) : path = p.substring(1)).split("/");
        };
    
        return {
    
            /**
            * Sets the parsing mode - either strict or loose. Set to loose by default.
            *
            * @param string mode The mode to set the parser to. Anything apart from a value of 'strict' will set it to loose!
            */
            setMode: function(mode) {
                options.strictMode = mode == "strict" ? true : false;
                return this;
            },
    
            /**
            * Sets URI to parse if you don't want to to parse the current page's URI.
            * Calling the function with no value for newUri resets it to the current page's URI.
            *
            * @param string newUri The URI to parse.
            */
            setUrl: function(newUri) {
                options.url = newUri === undefined ? window.location : newUri;
                setUp();
                return this;
            },
    
            /**
            * Returns the value of the specified URI segment. Segments are numbered from 1 to the number of segments.
            * For example the URI http://test.com/about/company/ segment(1) would return 'about'.
            *
            * If no integer is passed into the function it returns the number of segments in the URI.
            *
            * @param int pos The position of the segment to return. Can be empty.
            */
            segment: function(pos) {
                if (jQuery.isEmptyObject(parsed)) {
                    setUp(); // if the URI has not been parsed yet then do this first...    
                }
                if (pos === undefined) {
                    return segments.length;
                }
                return (segments[pos] === "" || segments[pos] === undefined) ? null : segments[pos];
            },
    
            attr: key, // provides public access to private 'key' function - see above
    
            param: param // provides public access to private 'param' function - see above
    
        };
    
    } ();
    复制代码
  • 相关阅读:
    RT-Thread can
    scons自动化构建工具
    Android 数据库 SQLiteOpenHelper
    请确保二进制储存在指定的路径中,或者调试他以检查该二进制或相关的DLL文件
    攻防世界misc新手区前三题
    基于session对象实现简单的购物车应用
    MS Excel中的内部日期处理方法
    如何实现对指定日期进行增减日期操作结果的输出
    2020前端大厂最新面试题,这一波我是用“身子换来的”
    字节、拼多多前端面经!
  • 原文地址:https://www.cnblogs.com/mingxuantongxue/p/3909926.html
Copyright © 2020-2023  润新知