0

在没有 jQuery 的情况下获取所有这样的元素

<input type="checkbox" name="IB_PROPERTY_415_DEL" id="IB_PROPERTY_415_DEL" value="Y">
<input type="checkbox" name="IB_PROPERTY_417_DEL" id="IB_PROPERTY_417_DEL" value="Y">

其中 415 更改每次迭代,整个值(414、416 等) 页面上存在其他名称的其他复选框我需要一次解决方案,用于控制台脚本

4

5 回答 5

4

使用循环?

var elements = [];
for (var i=415; i<418; i++)
    elements.push(document.getElementById("IB_PROPERTY_"+i+"_DEL"));

(唯一标识符应该足够了)

如果你不知道 id,你可以试试这个:

var inputs = document.querySelectorAll("input[type=checkbox][value=Y]");
var elements = [];
for (var i=0; i<inputs.length; i++)
    if (inputs[i].name == inputs[i].id && /^IB_PROPERTY_\d{3}_DEL$/.test(inputs[i].id))
        elements.push(inputs[i]);

(请注意,这document.querySelectorAll不适用于所有浏览器,请参阅@Matt 的解决方案以获得更好的方法)

于 2012-07-09T10:43:39.797 回答
3

不使用 jQuery(或至少 Sizzle),需要相当多的工作:

function getMatchingEls() { 
    // Get all the input elements
    var els = document.getElementsByTagName("input");
    // This regex matches the varying `name` attributes you have
    var regex = /^IB_PROPERTY_\d+_DEL$/
    // This is what we store matches in
    var matches = [];

    for (var i=0;i<els.length;i++) {
        var curr = els[i];

        // Check it's a checkbox, and it's name matches the expression
        if (curr.type === "checkbox" && regex.test(curr.name)) {
            matches.push(curr);
        }
    }

    return matches;
}
于 2012-07-09T10:44:27.810 回答
0

获取页面上的所有元素,编写一个正则表达式以使用匹配的字符串测试每个 id 并将它们存储在一个单独的数组中。该数组将包含您想要的元素。

于 2012-07-09T10:42:21.140 回答
0

如果所有元素都有根元素,则从中获取所有子元素,然后过滤掉您需要的元素:

var mathched = [];
var elements = document.getElementById('root').childNodes;
for (var i = 0; i < elements.length; i++) {
  if (elements[i].id.match("IB_PROPERTY_\\d+_DEL")) {
    matched.push(elements[i]);
  }
}  
于 2012-07-09T10:48:20.033 回答
0

简单的方法:

function get_checkboxes() {
    var cboxes = new Array();
    var inputs = document.getElementsByTagName('input');
    var len = inputs.length;
    for (var i=0; i<len; i++) {
        //if (inputs[i].name && inputs[i].name.indexOf('IB_PROPERTY_')==0) {
        if (inputs[i].name && inputs[i].name.match("IB_PROPERTY_\\d+_DEL")) { // this test is better test as alexanderb suggests
            cboxes.push(inputs[i]);
        }
    }
    //alert(cboxes.length);
    return cboxes;
}
于 2012-07-09T10:49:46.020 回答