javascript - 从多个值将多个 url 插入输入字段
问题描述
我有一个解析页面并获取一些参数以生成新 url 并将其插入到输入字段中的
fetch
getvalue1
请求应该动态生成)?
现在,带有表单的窗口不会生成value2
value3
如果我break
进入循环,代码会生成带有表单的窗口,但只显示一个 url
由于此代码应该是带有表单的窗口和带有 url 的三个输入字段
var url = 'google.com/page1'
fetch(url, {
method: 'GET',
credentials: 'include',
})
.then(function(response) {
return response.text()
})
.then(function(html) {
var parser = new DOMParser();
var doc = parser.parseFromString(html, "text/html");
var value4 = 'test4';
var UrlArr = [];
if (condition) {
var name = doc.querySelectorAll("someClass");
for (var i = 0; i < name.length; i++) {
var allNames = name[i].outerHTML;
var value1 = allNames.match('MyregExp1')[0];
var value2 = allNames.match('MyregExp2')[0];
var value3 = allNames.match('MYregExp3')[0];
var newUrl = `google.com/?${value1}&${value2}&${value3}&test=${value4}`;
//brake
console.log(value1);
// something1
// something2
// something3
// etc...
console.log(value2);
// something11
// something22
// something33
// etc...
console.log(value3);
// something111
// something222
// something333
// etc...
UrlArr.push(newUrl);
console.log(UrlArr);
//first-array
// [google.com/?something1&something2&$something3&test=test4]
// 0: google.com/?something1&something2&$something3&test=test4
// 1: google.com/?something11&something22&$something33&test=test4
// 2: google.com/?something111&something222&$something333&test=test4
// second-array
// [google.com/?something1&something2&$something3&test=test4,google.com/?something11&something22&$something33&test=test4 ]
// 0: google.com/?something1&something2&$something3&test=test4
// 1: google.com/?something11&something22&$something33&test=test4
// 2: google.com/?something111&something222&$something333&test=test4
// third-array
// [google.com/?something1&something2&$something3&test=test4,google.com/?something11&something22&$something33&test=test4,google.com/?something111&something222&$something333&test=test4]
// 0: google.com/?something1&something2&$something3&test=test4
// 1: google.com/?something11&something22&$something33&test=test4
// 2: google.com/?something111&something222&$something333&test=test4
}
if (allNames.length >= 2) {
var newForm = Ext.create('Ext.form.Panel', {
title: 'Form',
width: 250,
autoHeight: true,
autoScroll: true,
bodyPadding: 10,
id: 'Form',
});
function newRadio() {
var radio = new Ext.form.Radio({
height: 40,
labelWidth: 110,
width: 20,
name: 'url',
});
return radio;
}
function newTextArea(id) {
var textArea = new Ext.form.TextArea({
fieldLabel: i + '_url',
height: 30,
labelWidth: 110,
width: 330,
submitValue: false,
readOnly: true,
autoScroll: true,
id: id
});
return textArea;
}
for (i = 0; i < name.length; i++) {
var id = i;
id = 'field_' + id;
var field = newTextArea(id);
var radioGr = newRadio();
var cont = NewContainer();
field.setValue(UrlArr);
newForm.add(cont);
}
function NewContainer() {
var container = new Ext.container.Container({
xtype: 'container',
layout: 'hbox',
items: [radioGr, field]
});
return container;
}
var win = new Ext.Window({
title: "Window",
layout: 'fit',
modal: 'true',
height: 500,
width: 385,
items: [newForm],
buttons: [{
text: "Confirm",
handler: function() {
//something handler
}
}]
});
win.show();
}
}
解决方案
您提供的代码中存在一些问题,例如:
Container
radio
在和之前被创建textArea
。- 您的要求是在字段内设置 newUrl,但是已经有一个 for 循环,在该循环中该变量正在更新,并且它在 for 循环的范围内。因此,您可以将另一个变量定义为第一个 for 循环上方的数组,并将 URL 推入该数组中。
我已经修改了您的代码,请参阅下文并为您的案例提供了一个工作小提琴。
var url = 'google.com/page1'
fetch(url, {
method: 'GET',
credentials: 'include',
})
.then(function (response) {
return response.text()
})
.then(function (html) {
var parser = new DOMParser();
var doc = parser.parseFromString(html, "text/html");
var value4 = 'test4';
var UrlArr = [];
if (condition) {
var name = doc.querySelectorAll("someClass");
for (var i = 0; i < name.length; i++) {
var allNames = name[i].outerHTML;
var value1 = allNames.match('MyregExp1')[0];
var value2 = allNames.match('MyregExp2')[0];
var value3 = allNames.match('MYregExp3')[0];
var newUrl = `google.com/?${value1}&${value2}&${value3}&test=${value4}`;
console.log(value1);
console.log(value2);
console.log(value3);
console.log(newUrl);
UrlArr.push(newUrl);
}
if (allNames.length >= 2) {
var newForm = Ext.create('Ext.form.Panel', {
title: 'Form',
width: 250,
autoHeight: true,
autoScroll: true,
bodyPadding: 10,
id: 'Form',
});
function newRadio() {
var radio = new Ext.form.Radio({
height: 40,
labelWidth: 110,
width: 20,
name: 'url',
});
return radio;
}
function newTextArea(id) {
var textArea = new Ext.form.TextArea({
fieldLabel: i + '_url',
height: 30,
labelWidth: 110,
width: 330,
submitValue: false,
readOnly: true,
autoScroll: true,
id: id
});
return textArea;
}
for (i = 0; i < name.length; i++) {
var id = i;
id = 'field_' + id;
var field = newTextArea(id);
var radioGr = newRadio();
var cont = NewContainer();
field.setValue(UrlArr[i]);
newForm.add(cont);
}
function NewContainer() {
var container = new Ext.container.Container({
xtype: 'container',
layout: 'hbox',
items: [radioGr, field]
});
return container;
}
var win = new Ext.Window({
title: "Window",
layout: 'fit',
modal: 'true',
height: 500,
width: 385,
items: [newForm],
buttons: [{
text: "Confirm",
handler: function () {}
}]
});
win.show();
}
}
});
推荐阅读
- python - 编译python脚本供matlab使用
- javascript - Javascript - 总计并删除对象数组中的重复行
- database - 弹簧靴。开始时运行的自动脚本的路径
- react-native - 将异步存储与 useState 一起使用对我来说是一个问题,我需要按两次才能更新值
- css - 网格行高根据内容与网格模板区域
- r - R:关于 [CPS85$wage < 40,] 的快速问题
- node.js - 尝试删除Node express mongoDb中的单行时删除所有记录
- javascript - 无法在单击按钮时使用 API 呈现数据
- python - 我需要模拟 docker 服务器以在 python 中进行单元测试
- r - 安装 vcfR 包时无法加载共享对象 vegan.so