从元素的id中获取数字

时间:2012-09-06 20:23:55

标签: javascript

我有一些输入如下:

<input type="hidden" id="selected_id-1" name="id[]" />
<input type="hidden" id="selected_id-2" name="id[]" />
<input type="hidden" id="selected_id-3" name="id[]" />
<input type="hidden" id="selected_id-5" name="id[]" />

该列表不仅包含4个元素。

所以,我想从名为“id”的元素的id中提取最高数字(在我们的例子中= 5)。

需要纯JavaScript。

编辑:感谢所有回答我问题的人。

7 个答案:

答案 0 :(得分:4)

var number = element.id.replace(/^[^\d]+/, "");

var number = element.id.match(/\d+/)[0];

编辑:刚看到你想要获得最后一个元素:

var elements = document.getElementsByName("id[]");
var element = elements[elements.length - 1];

现在您可以使用我在编辑上方显示的任何一种方法。

答案 1 :(得分:3)

假设您的元素可能没有按ID排序,您必须全部检查才能找到最高的元素。

var inputs = document.getElementsByTagName('input');
var highest = 0;
for(var i=0; i<inputs.length; i++) {
    if(inputs[i].name == 'id[]') {
        var current = inputs[i].id.split('-')[1];
        highest = (current > highest) ? current : highest;
    }
}
// Now highest contains the highest numeric id
console.log(highest);

答案 2 :(得分:2)

您可以使用正则表达式或slice()

var num = this.id.match(/(\d+)/)[0];

JS Fiddle demo

或者,使用切片:

var num = this.id.slice(-1);

JS Fiddle demo

slice()的选项仅适用于一位数字。

答案 3 :(得分:2)

这假设元素是按数字顺序排列的。

var elems = document.getElementsByName("id[]");
//or var elems = document.getElementById("formId").elements["id[]"];
//or var elems = document.formName.elements["id[]"];
//or var elems = document.forms[0].elements["id[]"];//0 is the index of the form on the page
var lastElem = elems[elems.length-1];
var lastId = lastElem.id;
var parts = lastId.split("-");
var num = parts[1];
alert(num);

如果它们不是按数字顺序排列,则需要循环并跟踪。

function getNumber(elem){
    return parseInt(elem.id.split("-")[1],10);
}

var elems = document.getElementsByName("id[]");
var max = getNumber(elems[0]);
for (var i=1;i<elems.length;i++) {
    var num = getNumber(elems[i]);
    if (num>max) {
        max = num;
    }
}
alert(max);

答案 4 :(得分:1)

使用像jQuery这样的东西要容易得多,因为它会为你处理所有难点。但如果您使用的是现代浏览器,则可以这样做:

var highestNum = (function() {
    var highest = 0, r = /\-(\d+)$/, i, elems = document.getElementsByName("id[]");
    for(i=0; i<elems.length; i++) {
        highest = Math.max(highest, +elems[i].id.match(r)[1]);
    }

    return highest;
});

这也说明了可能出现故障的元素。 虽然它依赖于一个非常新的浏览器工作(IE&gt; = 8或任何不是IE的东西)。如果你想对IE6之类的东西提供后备支持,最好的办法就是使用jQuery或其他类似的库。使用jQuery,解决方案就是这样:

var highestNum = (function() {
    var highest = 0, r = /\-(\d+)$/;

    $("input[name='id[]']").each(function() {
         highest = Math.max(highest, +this.id.match(r)[1]);
    });

    return highest;
});

更新:我欺骗了别人的解决方案,使其更加适合IE6。 jQuery解决方案仍然有点简单,但vanilla解决方案应该适合您的需求。

答案 5 :(得分:1)

假设您的表单是页面上的第一个表单,您可以执行以下操作:

var c = document.forms[0].children;

for( var i=0; i<c.length; i++ ) {
    var prefix = "selected_id-";
    if( c[i].id.search( prefix )===0 )
        console.log( c[i].id.substring( prefix.length ) );
}

答案 6 :(得分:1)

function check(){
 var form = document.forms[0];
 var txtS =  form["id[]"];
 var len = txtS.length;
var numb =txts[len-1].split('-')[1]
}

或者您可以使用

var elementgroup = document.getElementsByName("id[]");
var nub= elementgroup[elementgroup .length - 1].split('-')[1];