通过掩码获取所有元素

时间:2012-07-09 10:38:02

标签: javascript

在没有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等) 页面上存在其他带有其他名称的复选框 我需要一次解决方案,用于控制台脚本

5 个答案:

答案 0 :(得分: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的解决方案以获得更好的方式)

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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

答案 3 :(得分: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]);
  }
}  

答案 4 :(得分: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;
}