0

我有一些输入如下:

<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。

编辑:谢谢大家回答我的问题。

4

7 回答 7

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

或者

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

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

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

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

于 2012-09-06T20:26:06.913 回答
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);
于 2012-09-06T20:25:50.733 回答
2

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

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

JS 小提琴演示

或者,使用切片:

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

JS 小提琴演示

但是,带有 的选项slice()仅适用于一位数。

于 2012-09-06T20:26:32.587 回答
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);
于 2012-09-06T20:28:57.000 回答
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>=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 解决方案应该适合您的需求。

于 2012-09-06T20:34:44.317 回答
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 ) );
}

​</p>

于 2012-09-06T20:39:42.927 回答
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];
于 2012-09-06T20:45:31.897 回答