【问题标题】:Bookmarklet to replace input values of random name input fields用于替换随机名称输入字段的输入值的书签
【发布时间】:2018-11-03 01:56:20
【问题描述】:

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

例子:

<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 进行正则表达式。

【问题讨论】:

  • 您是否尝试过使用getElementsByClassName() 或者可能使用querySelectorAll()
  • getElementsByClassName() 不好,因为有两种类型的输入字段,一种名称为 ABC_randomnumbers,另一种名称为 DEF_randomnumbers (每个输入字段的这些数字也不同)并且它们必须接收不同的值。不过我没听说过querySelectorAll()
  • 例如,如果您想使用querySelectorAll 来定位所有inputsname 属性的值中包含_randomnumbers,您可以使用... @ 987654331@
  • 对不起,_randomnumbers 真的是后端生成的一串随机数。每个 input 字段都不同。示例:&lt;input class="Class1" name="ABC_142315" value="634624" type="text"&gt; &lt;input class="Class1" name="DEF_512325" value="743534" type="text"&gt; &lt;input class="Class1" name="ABC_124156" value="525246" type="text"&gt; &lt;input class="Class1" name="DEF_141534" value="624253" type="text"&gt; ...
  • 你是不是这个意思JsFiddle Demo

标签: javascript replace innerhtml bookmarklet getelementsbyname


【解决方案1】:

我会避免以这种方式编辑基本 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
});

【讨论】:

  • 如何从这里设置输入字段的值?
  • @ventusz 使用 input.value="something"; 就像我在 JsFiddle 示例中使用的一样,唯一的区别是我使用了不同的变量名 element.value=1000;
  • 我已经在原始页面上将这个和其他代码作为书签运行,虽然它改变了页面上可以看到的值,但如果我与 Inspector 检查它并没有改变任何东西。我必须提交包含大约 200 个输入字段的表单,但所有输入字段都有两个值。不幸的是,服务器端没有解决方法,这就是我尝试客户端的原因。
  • @ventusz 如果您可以看到它更改了页面上的值,那么它完全按照您的要求进行。您没有说任何关于更改与这些值相关的任何内容或在更改后触发任何其他功能/提交。我们只能根据您在问题中解释的信息和期望。
  • @NewToJS 它正在工作,案例已解决,我真的很高兴你的帮助。你为我节省了很多时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 2011-10-11
  • 1970-01-01
  • 2011-03-05
  • 1970-01-01
相关资源
最近更新 更多