提问人:Sachin Agrawal 提问时间:7/28/2023 更新时间:7/30/2023 访问量:54
定义将单个文本分解为多个条件的脚本
Define a Script to Breakup Single Text to multiple Conditions
问:
我在 Tampermonkey 上使用一个简单的脚本来更改网页上的某些值。
在网页中,输入框中有一个输入值,即“FPPUTHP1100000”
这是一个材料代码,材料代码结构如下:-
F 代表 FRESH
PPUTHP 代表 PPC
110 ACS 支架
0000 代表 MRP。
材料代码不是通用的,每次都可以更改。
我想将其记录在变量中,并将合并的文本推送到空的输入框中
像 ACS-PPC-MRP-FRESH
有很多材料代码,但基本结构仅如上所述。
首字母可以是F,C,P,D(FRESH,C&T,PDMG,DMG)
接下来的六个字母可以
PPUTHP,PPUSLH,PPUFLH,43UTHP,53UTHP(PPC,超级,WP,OPC43,OPC53)
接下来的三个字母可以是 110,111,112,113,114 (ACS,VCS,PGU,DGU,AGU)
接下来的四个字母可以是 0000 和 5000(MRP,非 MRP)
谁能说出如何制作这个脚本。
答:
首先,使用 Document 将值存储在变量中。getElementById()
喜欢这个。。。
var string = document.getElementById("*replace this with id if input field")
现在只需在此字符串上应用子字符串函数并将它们保存到变量中,如下所示......
var first = string.substring(1, 0); \\ this will give you the first letter
var second = string.substring(1, 7); \\ it will give you next 6 letters
var third = string.substring(7, 10); \\ it will give you next 3 letters
var fourth = string.substring(10, 14); \\ it will give you next 4 letter
现在只需应用条件并使你像这样字符串
let final_string = ""
if(first == "f"){
final_string = final_string + "FRESH-"
}
else if(first == "C"){
final_string = final_string + "C&T-"
}
else if(first == "P"){
final_string = final_string + "PDMG-"
}
else{
final_string = final_string + "DMG-"
}
现在同样应用 if-else 梯形图并相应地将零件添加到final_string。
评论
$("span:contains('Despatch Detail').text()== "The Merged Text"
switch
if
else
假设输入始终按照您给定的顺序和长度进行,并且转换始终是您给定的值之一,您可以创建一个数组,其中包含输入的分隔点,然后创建另一个具有匹配索引的数组作为查找字典。像这样的东西:substring
let delimits = [0,1,7,10],
lookup = [
{ C: 'C&T', D: 'DMG', F: 'FRESH', P: 'PDMG' },
{ PPUTHP:'PPC', PPUSLH: 'SUPER', PPUFLH: 'WP', '43UTHP': 'OPC43', '53UTHP': 'OPC53' },
{ '110': 'ACS', '111': 'VCS', '112': 'PGU', '113': 'DGU', '114': 'AGU' },
{ '0000': 'MRP', '5000': 'NON MRP' }
];
document.querySelector('button').addEventListener('click', function() {
document.querySelector('input.output').value = delimits.map((delimit, index) =>
lookup[index][document.querySelector('input.input')
.value.substring(delimit, delimits[index + 1])]
).join('-');
});
document.querySelector('input.input').value = 'FPPUTHP1100000';
<input class="input"><button> -> </button><input class="output">
如果您希望输出的顺序与输入的顺序不同,则可以:
orig = output.split('-');
reorder = [orig[2], orig[1], orig[3], orig[0]].join('-');
根据 OP 请求进行编辑。其他一些经验说明:
如果你只使用自己的代码,DOM 遍历是可以的(尽管当你的项目变大时,即使这样也会引起头痛),但如果你试图遍历别人的代码,这是一个非常糟糕的主意。他们可以随时更改布局并破坏您的代码。相反,您应该使用或它们的某种组合来创建显式标识符。
id
class
attribute
现在一切都是异步的。在其他代码(tampermonkey、greasemonkey 等)之上编写代码时,您的脚本可能会在您尝试访问的元素加载之前就已执行,这使得您的脚本看起来没有执行任何操作。我确信有一种更聪明的方法,但我总是通过简单地将我的脚本包装在一个间隔内并在尝试更改它之前检查元素是否存在/具有我想要更改的属性来解决这个问题。
let loading = setInterval(function() {
if ($('.thing-required-for-your-script-to-work').length) {
clearInterval(loading);
//your script here
}
}, 1000);
let $input = $('bdi:contains("Material Code")').closest('div').next().find('input'),
$output = $('span:contains("Despatch Detail")').next(),
delimits = [0,1,7,10],
lookup = [
{ C: 'C&T', D: 'DMG', F: 'FRESH', P: 'PDMG' },
{ PPUTHP:'PPC', PPUSLH: 'SUPER', PPUFLH: 'WP', '43UTHP': 'OPC43', '53UTHP': 'OPC53' },
{ '110': 'ACS', '111': 'VCS', '112': 'PGU', '113': 'DGU', '114': 'AGU' },
{ '0000': 'MRP', '5000': 'NON MRP' }
];
$input.val('FPPUTHP1100000'); //simulating whatever the page loaded
$output.text(delimits.map((delimit, index) =>
lookup[index][$input.val().substring(delimit, delimits[index + 1])]).join('-'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- just guessing at the markup based on your code -->
<div><bdi>Material Code</bdi></div>
<div><input></div>
<div><span>Despatch Detail</span><p></p></div>
编辑 2、输出顺序:
let $input = $('bdi:contains("Material Code")').closest('div').next().find('input'),
$output = $('span:contains("Despatch Detail")').next(),
delimits = [0,1,7,10],
lookup = [
{ C: 'C&T', D: 'DMG', F: 'FRESH', P: 'PDMG' },
{ PPUTHP:'PPC', PPUSLH: 'SUPER', PPUFLH: 'WP', '43UTHP': 'OPC43', '53UTHP': 'OPC53' },
{ '110': 'ACS', '111': 'VCS', '112': 'PGU', '113': 'DGU', '114': 'AGU' },
{ '0000': 'MRP', '5000': 'NON MRP' }
],
output_order = [3,2,1,0]; //based on the lookup index
$input.val('FPPUTHP1100000'); //simulating whatever the page loaded
let output = delimits.map((delimit, index) =>
lookup[index][$input.val().substring(delimit, delimits[index + 1])]);
$output.text(output_order.map((index) => output[index]).join('-'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- just guessing at the markup based on your code -->
<div><bdi>Material Code</bdi></div>
<div><input></div>
<div><span>Despatch Detail</span><p></p></div>
评论
$("bdi:contains('Meterial Code')").closest('div').next().find('input').val()
$("span:contains('Despatch Detail').text()== "The Merged Text"
write the code for you
=
==
$('...').text() == '...'
$('...').text('...')
评论