替换 window.location当中的某个参数的值(而其它值不变)JS代码
在后台与前台的交互操作中,需要替换location当中的某个参数的值(而其它值不变)时,会用到以下函数:
说明:
win:传入的窗口句柄,如,window或window.parent等
forceAdding:当location当中的指定参数不存在时,是无法进行替换操作的,这时候,如果非要"替换"(即将参数名及其值附加上去),则可指定forceAdding为true(或非"零"性质的其它值),否则将不会执行替换操作.
<script type='text/javascript'>
//替换指定传入参数的值
//win为某窗体,paramName为参数,paramValue为新值,forceAdding为不存在该参数时是否也指定
function replaceParamVal(win,paramName,paramValue,forceAdding){
var search = win.location.search+'';
if(!search) {//没有任何查询参数,则直接附加
return ( forceAdding ? (win.location+'?'+paramName+'='+paramValue) : (win.location+'') );
}else{
var q = (win.location+'').split('?')[0];
var list = search.replace('?','').split('&');
var hasIn = false;
for(var i=0; i<list.length; i++) {
var listI = list[i];
if(listI.split('=')[0].toLowerCase() == paramName.toLowerCase()) {//指定参数
q = q + (i==0 ? '?' : '&');
hasIn = true; if(listI.indexOf('=') == -1) {//形式:"参数"
q = q + listI + '=' + paramValue;
}
else if (! listI.split('=')[1].length) { //形式:"参数="
q = q + listI + paramValue;
}
else {//形式:"参数=值"
q = q + paramName + '=' + paramValue;
}
}else {//其它参数
q = q + (i==0 ? '?' : '&');
q = q + listI;
}
} if (!hasIn && forceAdding) {//不存在,但必须要添加时
q = q + '&' + paramName + '=' + paramValue;
} return q;
} }
</script>
调用示例:
window.parent.location = replaceParamVal(window.parent,'rnd',encodeURIComponent(Date()+''),true)
个人小记:编写本函数主要原因,是在FF当中,由页面A中包含有一个iframe,利用其src的更换变化(指向页面B) 执行更新操作,操作后利用iframe执行A窗口的reload,这时在FF会导致连续刷新(在IE/Chrome等不会有此现象),仿约代码如:
A.html
<input type='button' value='执行更新' onclick='javascript:save();'/>
<script>
function save() {
document.getElementById('F').src='B.html?'+Date();
}
</script>
<iframe id="F" src="" width="200" height="200" frameborder="0"></iframe>
B.html
<script>
window.parent.alert('更新了!');
window.parent.document.getElementById('F').src = ''; //在以为加上这句可以解决,事实是,不灵!
window.parent.location.reload();
</script>
所以,最后还是想到另外的reload方式,就是替换随机指定的参数,于是有了以上函数,此时的B页面的代码如:(已省略replaceParamVal函数)
B.html
<script>
window.parent.alert('更新了!');
window.parent.location = replaceParamVal(window.parent,'rnd',encodeURIComponent(Date()+''),true)
</script>
弱弱地扩展了下该函数,支持字符串或window类型参数第一个参数win的传入值,方便各种场合:
<script type='text/javascript'>
//替换指定传入参数的值
//win为某窗体或查询字符串,paramName为参数,paramValue为新值,forceAdding为不存在该参数时是否也指定
function replaceParamVal(win,paramName,paramValue,forceAdding){
var search = (typeof win == 'object') ? (win.location.search+'') : (win={location:win},win.location); //改动for字符串的win
if(!search) {//没有任何查询参数,则直接附加
return ( forceAdding ? (win.location+'?'+paramName+'='+paramValue) : (win.location+'') );
}else{
var q = (win.location+'').split('?')[0];
var list = search.indexOf('?') == -1 ? [] : search.split('?')[1].split('&'); //改动for字符串的win
var hasIn = false;
var hasQ = false;//改动for字符串的win
for(var i=0; i<list.length; i++) {
var listI = list[i];
if(listI.split('=')[0].toLowerCase() == paramName.toLowerCase()) {//指定参数
q = q + (i==0 ? '?' : '&');
hasIn = true; if(listI.indexOf('=') == -1) {//形式:"参数"
q = q + listI + '=' + paramValue;
}
else if (! listI.split('=')[1].length) { //形式:"参数="
q = q + listI + paramValue;
}
else {//形式:"参数=值"
q = q + paramName + '=' + paramValue;
}
}else {//其它参数
q = q + (i==0 ? '?' : '&');
q = q + listI; if(listI.indexOf('=') == -1) {//形式:"参数" //改动for字符串的win
hasQ = true;//改动for字符串的win
}
}
} if (!hasIn && forceAdding) {//不存在,但必须要添加时
q = q + (q.indexOf('&') == -1 ? (hasQ ? '&' : '?') : '&') + paramName + '=' + paramValue; //改动for字符串的win
} return q;
} } //另外,可将该函数扩展到string去
String.prototype.reParam = function(paramName,paramValue,forceAdding) {
return replaceParamVal(this.toString(),paramName,paramValue,forceAdding);
}
</script> <script>
window.document.write('<br/>','a&b=2'.reParam('rnd',encodeURIComponent(Date()+''),true))
window.document.write('<br/>','?a=1&b=2'.reParam('rnd',encodeURIComponent(Date()+''),true))
window.document.write('<br/>','B.asp?a=1&b=2&rnd=xxxxxxx'.reParam('rnd',encodeURIComponent(Date()+''),true))
window.document.write('<br/>','http://localhost:8888/index.asp?a=1&b=2&rnd='.reParam('rnd',encodeURIComponent(Date()+''),true))
window.document.write('<br/>',window.location.toString().reParam('rnd',encodeURIComponent(Date()+''),true))
window.document.write('<br/>','file:///C:/Users/Administrator/Desktop/B.html?Wed%20Jul%2017%202013%2017:56:04%20GMT+0800'.reParam('rnd',encodeURIComponent(Date()+''),true))
</script>
替换 window.location当中的某个参数的值(而其它值不变)JS代码的更多相关文章
- Arison [JS]window.location获取url各项参数详解
https://www.cnblogs.com/Arison/p/5286368.html 对于这样一个URL代码如下 复制代码 http://www.php230.com :80/fisker/po ...
- window.location获取url各项参数详解
window.location方法后还还可以带href,search等参数,下面我们来看看获取url各项参数的办法. URL即:统一资源定位符 (Uniform Resource Locator, U ...
- [JS]window.location获取url各项参数详解
window.location方法后还还可以带href,search等参数,下面我们来看看获取url各项参数的办法. URL即:统一资源定位符 (Uniform Resource Locator, U ...
- 关于window.location.href 传中文参数 乱码问题
传中文查询乱码问题 则需要对要传的参数进行二次编码 例如 window.location.href ="/xx.jsp?name="+name+""; 这样子 ...
- window.location.href后携带参数
JS文件中: window.location.href后可携带参数,但是不安全,虽然在技术上是可以实现的 1.传参:window.location.href = "RecordCare.as ...
- javaweb使用 window.location.href 传中文参数 乱码问题
JS: var cn_name= document.getElementById("cn_name"); window.location.href="${URL}?na ...
- Javascript Window Location
window.location 对象在编写时可不使用 window 这个前缀. URL : 统一资源定位符 (Uniform Resource Locator) 说明: 完整的URL示例:scheme ...
- window.location.href问题,点击,跳转到首页
onClick="window.location.href='./';" 点击,跳转到首页. location.href=url Js中实现跳转 window.location.h ...
- window.location获取URL中各部分
博客分类: JAVASCRIPT JavaScriptASP.netSchemeASP网络协议 URL即:统一资源定位符 (Uniform Resource Locator, URL) 完整的URL ...
随机推荐
- C++顺序性容器、关联性容器与容器适配器
什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象 ...
- CSS垂直水平居中
小小的总结一下:行内元素水平居中用text-align: center;块级元素水平居中用margin-left: auto; margin-right: auto; 首先讨论一下单行时的情况. 毫无 ...
- 关于vs启动调试报错:CS0016: 未能写入输出文件“xxxxxxxx”--“目录名称无效。”解决方法
很多人都会遇到这个错误,网友说一般这错误都是由于权限引起,我尝试按照博客写的方法,解决失败!http://www.cnblogs.com/finesite/archive/2011/01/28/194 ...
- android监听键盘
android中的带有输入功能的页面布局经常被弹出的键盘遮挡,一种处理方法是监听键盘的弹出,设置布局的padding或隐藏某些占位控件,使得输入框不被键盘遮挡.一种常用的方法是当Activity设置为 ...
- [poco] HttpRequest之post方法
转自 http://www.cnblogs.com/yuanxiaoping_21cn_com/archive/2012/06/10/2544032.html #import <iostream ...
- cocos2d-x -------之笔记篇 环境的安装
cocos2d-x -------之笔记篇 环境的安装 使用到的工具有VS2010 cygwin android-NDK eclipse android SDK 1.首先是android相关环境的安 ...
- EasyUI在MVC4中需要部分刷新页面时load()后页面变形问题!
最近在使用MVC4与EasUI过程中遇到些容易导致界面变形的问题,纠结了很久,但其实当发现问题在哪里时,倒觉得最终还是自己对MVC4的概念没把握好,OK,show time. 本示例Contact ...
- SQL Server 固定角色
1. 查看固定服务器角色 execute sp_helpsrvrole; 管理: execute master..sp_addsrvrolemember @logingName='neeky' @ro ...
- 项目中引用ThinkPHP框架
ThinkPHP是一个宽度.兼容且简单的国产的轻量级框架,具有优良的性能,并且非常注重易用性. 那么,我们该如何将ThinkPHP引入自己的项目中,使得自己的项目可以使用这款优良的框架呢? 首先介绍下 ...
- 限制Inactive物料录入BOM
应用 Oracle Bill Of Materiel 层 Level Function 函数名 Funcgtion Name CUX_BOMFDBOM 表单名 Form Name CUXBOMFD ...