当前位置: 首页 > news >正文

在js中获取query string 以及重写URL的函数

函数用途:如标题,1. 从URL中解析出参数,2.重写URL中的参数值


如下代码所示,包含了测试。可以直接copy到浏览器中,输入测试地址:localhost:xxx?a=1&b=2&c=3 ,在console中运行查看结果:

// - test

// - get from current location
var url = document.location.href;

// - extract param from url
console.log(getUrlParam(url,"a") == "1");
console.log(getUrlParam(url,"b") == "2");
console.log(getUrlParam(url,"c") == "3");

// - rewrite url
url = setUrlParam(url,"a",3);
url = setUrlParam(url,"b",1);
url = setUrlParam(url,"c",2);

console.log(getUrlParam(url,"a") == "3");
console.log(getUrlParam(url,"b") == "1");
console.log(getUrlParam(url,"c") == "2");


// - helper functions

 function getUrlParam(location,name) {
        var url = location;
        var splitIndex = url.indexOf("?") + 1;
        var paramStr = url.substr(splitIndex, url.length);

        var arr = paramStr.split('&');
        for (var i = 0; i < arr.length; i++) {
            var kv = arr[i].split('=');
            if (kv[0] == name) {
                return kv[1];
            }
        }
        return "";
    }

    function setUrlParam(location,name, value) {
        var url = location;
        var splitIndex = url.indexOf("?") + 1;
        var paramStr = url.substr(splitIndex, url.length);

        var newUrl = url.substr(0, splitIndex);

        // - if exist , replace 
        var arr = paramStr.split('&');
        for (var i = 0; i < arr.length; i++) {
            var kv = arr[i].split('=');
            if (kv[0] == name) {
                newUrl += kv[0] + "=" + value;
            } else {
                if (kv[1] != undefined) {
                    newUrl += kv[0] + "=" + kv[1];
                }
            }
            if (i != arr.length - 1) {
                newUrl += "&";
            }
        }

        // - if new, add
        if (newUrl.indexOf(name) < 0) {
            newUrl += splitIndex == 0 ? "?" + name + "=" + value : "&" + name + "=" + value;
        }
        return newUrl;
    }
IE中运行结果:




相关文章:

  • B/S架构中的数据推送技术
  • C# split字符串 根据1个或多个空格
  • 基于PHP的Flex Socket安全策略设置
  • Windows Azure系列-- Azure Table的CRUD操作
  • [IE编程] 如何获得IE版本号
  • Windows Azure 系列-- Azure Queue的操作
  • Build the Hack CPU with Verilog
  • 使用Service Bus Topic 实现简单的聊天室
  • 使用Service Bus + SignalR 实现聊天室
  • 中移动OMS系统展望..
  • Asp.net MVC4 + signalR 聊天室实现
  • JSF的国际化
  • javascript 替换浏览器Tab的title实现消息通知提示
  • 很好很强大 中移动OMS开源操作系统使用感想
  • [Windows编程] 获取系统CPU 个数
  • JS 中的深拷贝与浅拷贝
  • 【剑指offer】让抽象问题具体化
  • CSS中外联样式表代表的含义
  • Java 23种设计模式 之单例模式 7种实现方式
  • Java 内存分配及垃圾回收机制初探
  • MYSQL 的 IF 函数
  • Netty 4.1 源代码学习:线程模型
  • Objective-C 中关联引用的概念
  • react-native 安卓真机环境搭建
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 缓存与缓冲
  • 思考 CSS 架构
  • 优化 Vue 项目编译文件大小
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • $.ajax()方法详解
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (03)光刻——半导体电路的绘制
  • (HAL库版)freeRTOS移植STMF103
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (搬运以学习)flask 上下文的实现
  • (层次遍历)104. 二叉树的最大深度
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • ./configure,make,make install的作用(转)
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .gitattributes 文件
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET Core引入性能分析引导优化
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET成年了,然后呢?
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @TableId注解详细介绍 mybaits 实体类主键注解