快速删除可用量为 0 的行

为啥有这需求,很简单,因为手动删除太累了。我点一下删除按钮,页面会弹出弹窗和会自动淡出的半透明层,弹窗必须手动点确认就算了,关键是半透明层会遮挡我继续点其它的删除按钮。
也就是说,我要么每点一下删除就点一下确认,要么就点一下删除等 3 秒半透明层自己消失再点下一个删除按钮。
这怎么能忍?索性整个 JS 一次性删除吧。

方法一

原理:借助 chromium 内核浏览器提供的 xpath 插件选定删除和确定按钮,再循环点击。
用法:打开浏览器控制台,分两次输入 / 粘贴以下代码。
注意:xpath 插件是 chromium 提供的,js 本身不带这个功能,所以只保证 chromium 类浏览器有效。

1
2
// 第 1 步
var delBtns=$x('//ul[@id="uladd"]/li[./span[starts-with(@id,"qty_lmt_span_") and normalize-space(text())="0"]]/span[@class="operation"]/a[@class="delCgt"]');for(b of delBtns)b.click();
1
2
// 第 2 步
var yesBtns=$x('//p[@class="ui_p"]/input[@class="ui_button"]');for(y of yesBtns)y.click();

方法二

原理:使用 js 选定删除和确定按钮,再循环点击。
用法:打开浏览器控制台,输入 / 粘贴以下代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 点击所有可用量为 0 的行的删除按钮
var rows = document.getElementById('uladd').children;
for (var i = rows.length - 1; i >= 0; i--) {
var spans = rows[i].getElementsByTagName('span');
for (var span of spans) {
if (span.id.startsWith('qty_lmt') && span.innerText.trim() == '0') {
rows[i].getElementsByClassName('operation')[0].getElementsByClassName('delCgt')[0].click();
}
}
}
// 隐藏黑色半透明背景
setTimeout(function() {
var bgs = document.body.getElementsByTagName('div');
for (var bg of bgs) {
if (bg.style.zIndex == '9999' && bg.style.opacity == '0.3') {
bg.style.display = 'none';
}
}
}, 100);
// 隐藏弹窗
setTimeout(function() {
var divs = document.getElementsByClassName('ui_msg');
for (div of divs) {
div.parentNode.style.display = 'none';
}
}, 700);

方法三

原理:同方法二(其实代码就是方法二的代码压缩了一下)
用法:给浏览器添加书签,名称随便写,比如我写的是“新商盟快删”,网址填写以下代码后确认。需要使用的时候点一下这个书签即可。

1
2
// 压缩版本
javascript: var rows=document.getElementById('uladd').children;for(var i=rows.length-1;i>=0;i--){var spans=rows[i].getElementsByTagName('span');for(var span of spans){if(span.id.startsWith('qty_lmt')&&span.innerText.trim()=='0'){rows[i].getElementsByClassName('operation')[0].getElementsByClassName('delCgt')[0].click()}}}setTimeout(function(){var bgs=document.body.getElementsByTagName('div');for(var bg of bgs){if(bg.style.zIndex=='9999'&&bg.style.opacity=='0.3'){bg.style.display='none'}}},100);setTimeout(function(){var divs=document.getElementsByClassName('ui_msg');for(div of divs){div.parentNode.style.display='none'}},700);

快速删除可用量为 0 的行

给自己加个 TODO 吧,每次订烟都是把收藏的烟按最大可用量预定,不需要脑袋,那还是让代码一键完成比较合适。
对了,经理说想要保住评级的话,最好每次的需求量是订购量的 1.5 倍。