在变量索引处插入字符串
Inserting a string at a variable index
我一直找不到一个工作示例,也找不到关于如何实现以下目标的好解释:(如果有人能给我指明正确的方向,我将不胜感激。
我有一个查询字符串:**"/api/bla?sources=[1,2]&plans=[1,2]&codes=[1,2,3]"**
当我的页面上发生某些事件时,我将通过javascript或jquery更新查询字符串,无论是哪一个。
例如,页面上有一个多选下拉列表,其中包含[sources]和[plans和[codes 当从下拉列表中选择ID为"3"的源(或复选框,无论使用的是什么页面控件)时,查询字符串参数sources[1,2]将需要附加一个"3"。同样,如果ID为"2"的项目未被选中,它也将从查询字符串中删除,留下sources[1,3]的新字符串 我对javascript/jquery有些陌生,尤其是更高级的字符串操作。我一直在尝试重新创造一些东西来证明这一点,但以下内容并没有完全奏效。 基本上,我最初的if语句按预期工作,但当其他语句被命中时(当需要向查询字符串中的现有模型添加另一个ID时,比如[sources]或[codes]的第二个ID),它会返回不稳定的输出,似乎我无法获得正确的公式来正确更新所有内容。 如果有人有任何例子或技巧,我也会很感激。Fiddle我正试图开始工作//TIMEMTABLE QUERY
function updateCalendar(filter_id, filter_element) {
//Run through the filter checks before making final call to query and update timetable?
//GET THE MODEL/OBJECT NAME
var queryName = filter_element.attr('data-owner');
//GET THE IDs //this is either an array of all selected IDs or a single id which is used in the else statement
var queryId = filter_element.attr('value');
var queryIds = $('#'+filter_id).val();
var modelCheckIndex = requestString.toLowerCase().indexOf(queryName.toLowerCase());
//build a request string
if (modelCheckIndex < 0) {
console.info('ADD MODEL TO QUERY STRING');
requestString = requestString + "&" + (queryName.toLowerCase() + "[" + queryIds + "]");
console.log(requestString);
}
else{
console.info('UPDATE MODEL ON QUERY STRING');
var position = requestString.toLowerCase().indexOf(queryName.toLowerCase());
//requestString = requestString.substr(modelCheckIndex -1, requestString.length -1) + "," + queryId + "]";
requestString = requestString.slice(modelCheckIndex.indexOf("]"), modelCheckIndex) + "," + queryId;
console.log(requestString);
}
//MAKE THE API CALL USING CREATED QUERY STRING
}
您似乎只是在解析和更新查询字符串时遇到了问题。在这种情况下,我有一个我一直在使用的功能(感谢谷歌)
function getUriParams(string) {
var params = {},
queryString = string.slice(string.lastIndexOf('?')).substring(1),
regex = /([^&=]+)=([^&]*)/g,
m;
while (m = regex.exec(queryString)) {
params[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
}
return params;
}
输入是requestString
,输出是查询字符串的键值对的对象。
为了使对象成为字符串,jQuery使$.param()
变得简单。
//get key value pairs
var obj = getUriParams(requestString);
//make query string
var str = $.param(obj);
我建议稍微更改一下逻辑。我会为所需的参数使用一些数据存储,并在每次必要时重新生成请求字符串,就像下面的例子一样。
这比每次值发生变化时重新生成字符串要好得多。
var data = {
sources: [1, 2],
plans: [],
codes: [1, 3, 4]
};
function buildStr() {
function get(key) { return key + '=' + JSON.stringify(data[key]); }
return '/api/bla?' + ['sources', 'plans', 'codes'].map(get).join('&');
}
document.write('<pre>' + buildStr() + '</pre>');
- javascript时间戳插入字符串变量
- 在 JavaScript 中,将文本插入字符串的最简单方法是什么?
- 我可以在 Javascript 中的 onclick 中的“this”之后插入字符串吗?
- 在CoffeeScript中,是否存在一个'官方'在运行时而不是编译时插入字符串的方法
- 在变量索引处插入字符串
- 如何在文本输入数组中插入字符串
- 如何在Angular中插入字符串
- 使用JavaScript在另一个字符串的多个位置插入字符串
- 使用eclipse批处理脚本:在文件名中插入字符串
- 将JavaScript对象中的属性插入字符串
- 在页面上的图像后面插入字符串
- ES6从文件内容插入字符串
- 在Angular中不能在http get请求中插入字符串
- 在PHP中定义的javascript中插入字符串
- 动态插入字符串到ACE代码编辑器,angular JS
- 在元素ID中循环时插入字符串
- 在head标签内插入字符串
- 在区域中忠实地插入字符串
- 在行号 nodejs 处插入字符串
- 当用户输入时自动插入字符串