我正在尝试为devtools设计一个js代码段,该代码段会在一些输入标签中自动添加一些信息。
我所做的:
var labels = [
"navigationStart",
"unloadEventStart",
"unloadEventEnd"];
var newRuleXpath = "//div[@class='btn-group dropdown']/button[@class='btn btn-primary']";
var formControlClass = "form-control ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required";
String.format = function() {
var s = arguments[0];
for (var x = 0; x < arguments.length - 1; x++) {
var reg = new RegExp("\\{" + x + "\\}", "gm");
s = s.replace(reg, arguments[x + 1]);
}
return s;
}
function getElementByXpath(path) {
return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}
function wait(ms){
var start = new Date().getTime();
var end = start;
while(end < start + ms) {
end = new Date().getTime();
}
}
function addRule(rule) {
var resource = rule.startsWith("resources");
if (resource == true){
var regexp = String.format("<span id='customextraction-{0}'>((?:[0-9]|.)*?)</span>", rule);
}
else {
var regexp = String.format("<span id='customextraction-perftimings-{0}'>((?:[0-9]|.)*?)</span>", rule);
}
getElementByXpath(newRuleXpath).click();
var elems = document.getElementsByClassName(formControlClass)
elems[0].value = rule
elems[1].value = regexp
}
for (var i = 0; i < labels.length; i++){
let rule = labels[i]
addRule(rule)
wait(500)
}
因此,代码可以正常工作,但只影响标签数组的最后一个元素。
有什么想法吗?
它不仅仅影响数组中的最后一个元素。只是它影响了最后一个元素。你写
var elems = document.getElementsByClassName(formControlClass)
elems[0].value = rule
elems[1].value = regexp
因此,每次循环迭代时,它都会抓住该组元素,并应用相同的元素(前两个,如您所指定的get[0]
和[1]
),并应用您的规则。循环的每次迭代都会覆盖最后一个,因为您每次都引用相同的DOM节点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句