zoukankan      html  css  js  c++  java
  • 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
    
        };
    
    } ();
  • 相关阅读:
    FocusBI:MDX检索多维模型
    FocusBI:地产分析&雪花模型
    FocusBI:租房分析&星型模型
    FocusBI:《DW/BI项目管理》之SSIS执行情况
    FocusBI:租房分析可视化(PowerBI网址体验)
    Eclipse创建自定义HTML5,JSP模板
    小测试解析
    vue---组件通讯
    前期准备-Git篇
    npm install 关于 sass 屡次失败问题
  • 原文地址:https://www.cnblogs.com/feng-NET/p/4541116.html
Copyright © 2011-2022 走看看