如何使用Greasemonkey自动选择单选按钮

How can I auto-select a radio button with Greasemonkey?

本文关键字:选择 单选按钮 何使用 Greasemonkey      更新时间:2023-09-26

我想用Greasemonkey选择自动单选按钮。但我要选择标签名称的收音机。当我看到四个单选按钮时,Greasemonkey需要选择我的选项。示例:我想要自动选择标签Instagram

<label for="ContentPlaceHolder1_answer3">Instagram</label>

如何使用Greasemonkey选择此单选按钮?

<div class="row">
              <input type="radio" tabindex="3" value="answerswer1" name="ctl00$ContentPlaceHolder1$1" id="ContentPlaceHolder1_answer1"><label for="ContentPlaceHolder1_answer1">Twitpic</label></div>
<div class="row">
            <input type="radio" tabindex="4" value="answerswer2" name="ctl00$ContentPlaceHolder1$1" id="ContentPlaceHolder1_answer2"><label for="ContentPlaceHolder1_answer2">Yfrog</label></div>
<div class="row">
            <input type="radio" tabindex="5" value="answerswer3" name="ctl00$ContentPlaceHolder1$1" id="ContentPlaceHolder1_answer3"><label for="ContentPlaceHolder1_answer3">Instagram</label></div>
<div class="row">
            <input type="radio" tabindex="6" value="answerswer4" name="ctl00$ContentPlaceHolder1$1" id="ContentPlaceHolder1_answer4"><label for="ContentPlaceHolder1_answer4">Flickr</label></div>
 </div>


试试这个:

var label="whatever"; //The label you want to look for, you may already have some such variable
var allLabels=document.getElementsByTagName("label"); //Get all labels
for (var i=0;i<allLabels.length;i++) { //Loop through labels
    if (allLabels[i].innerHTML.toLowerCase()==label) { //If a match is found...
        allLabels[i].parentNode.getElementsByTagName("input")[0].checked=true; //Check the parent element for inputs (radio buttons, for instance), and check the first one
    }
}

如果不知道HTML是如何组合在一起的,我无法确定这是否有效。你在问题中给出了HTML,但我不知道它是否保留了不变的格式。

我已经有一段时间没有使用xpath了,所以它可能什么都不做:)

但从理论上讲,这将搜索文本保持为"Instagram"的所有标签,然后在所有结果中循环,使用for属性来获取单选按钮,并将其设置为true。(尽管我认为它"选择"了单选按钮?)

function xpathSnapshot(expression,context) {
    var r=document.evaluate(expression,context,null,6,null),i=r.snapshotLength-1;
    this.iterate=function() {return r.snapshotItem(i--)}
}
var labels = xpathSnapshot("//label[contains(text(),'"Instagram'")]",document);
while (label = labels.iterate()) {
    document.getElementById(label.getAttribute("for")).checked = true;
}
var labels = document.getElementsByTagName('label'); //get the labels
for (var i = 0; i < labels.length; ++i) { //loop through the labels
    if (labels[i].textContent == "Instagram") { //check label text
        labels[i].click(); //if correct text, click the label
    }
}