用于替换随机名称输入字段的输入值的Bookmarklet

时间:2018-05-24 00:16:03

标签: javascript replace innerhtml bookmarklet getelementsbyname

我想创建一个bookmarklet来替换网页上每个输入字段的所有。它们有很多,但它们可以通过名称分为两类。

示例:

<input class="Class1" name="ABC_randomnumbers" value="randomnumber" type="text">
<input class="Class1" name="DEF_randomnumbers" value="randomnumber" type="text">

名称以ABC开头的输入字段将接收值X,其名称以DEF开头的输入字段将接收值Y. 我试过了

javascript:document.body.innerHTML=document.body.innerHTML.replace(/input class="Class1" name="ABC_(\d+)" value="\d+"/g,'input class="Class1" name="ABC_$1" value="X"'); document.body.innerHTML=document.body.innerHTML.replace(/input class="Class1 name="DEF_(\d+)" value="\d+"/g,'input class="Class1" name="DEF_$1" value="Y"');

替换HTML中这些字符串的所有出现,但它会弄乱整个页面,例如它会删除标记的内容。 我读了一些关于 getElementsByName 的内容,但它们没有相同的名称,我无法使用 getElementsByName 来使用regexp。

1 个答案:

答案 0 :(得分:0)

我不会以这种方式编辑基本HTML。更好的选择是使用Javascript代码编辑页面。我在下面提供了一个例子:

var allInputs = document.getElementsByTagName("input");

for (var i = 0; i < allInputs.length; i++) {
    if(allInputs[i].name.startsWith("ABC_")) {
        //Do Logic here
    }

    //Other cases here
}

下面提供的速记版本:

Array.from(document.getElementsByTagName("input")).forEach(function(input) {
    if(input.name.startsWith("ABC_")) {
        //Do Logic here
    }

    //Other cases here
});