Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从元素';身份证_Javascript - Fatal编程技术网

Javascript 从元素';身份证

Javascript 从元素';身份证,javascript,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[]" /&

我有以下几点意见:

<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


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

假设您的元素可能不是按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);
var inputs=document.getElementsByTagName('input');
var最高=0;
对于(var i=0;i最高)?电流:最高;
}
}
//现在,highest包含最高的数字id
console.log(最高);

编辑:刚刚看到您想要获取最后一个元素:

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

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

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

或者,使用slice:

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


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

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

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);
函数getNumber(elem){
返回parseInt(元素id.split(“-”[1],10);
}
var elems=document.getElementsByName(“id[]);
var max=getNumber(元素[0]);
对于(var i=1;imax){
max=num;
}
}
警报(最大值);

使用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;
});
var highestNum = (function() {
    var highest = 0, r = /\-(\d+)$/;

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

    return highest;
});
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 ) );
}

更新:我从其他人的解决方案中骗了一点钱,使它对IE6更加友好。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;
});
var highestNum = (function() {
    var highest = 0, r = /\-(\d+)$/;

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

    return highest;
});
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 ) );
}
var c=document.forms[0]。子项;
对于(var i=0;i
或者你可以使用

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

在jQuery中,它应该是
$('input')。length
。您能澄清一下:您是在寻找最高的数字,还是最后一个元素的数字?因此,如果它被排序为“1,3,2”,您是想要“2”(因为它是最后一个)还是“3”(因为它是最高的)?答案很简单,可以处理多位数。但它假设您知道元素是什么!@epascarello好吧,
文档。getElementById
只是一个例子,而且是一个错误的例子(我忘了
.id
!),但它假设您已经在某个字符串上拥有id。将进行编辑。这种情况不符合目的。如果他提前知道数字,他可以用
返回1;
@Pete再次回答,
getElementById
只是一个示例,我假设id已经存储在其他地方。问题还不够清楚在编辑之前。现在我有了一个新的答案。大卫,
匹配是否返回数组?你不应该访问数组的下标吗?@VivinPaliath:是的!我在几分钟后发现了这一点(因为编辑为更正!)=)元素不是按数字顺序排列的!如果你在问题中坚持这一点,会有所帮助。你说的是最后一个,不是最大的数字。第一个例子因为“querySelectorAll”在旧浏览器中不起作用?或者还有别的吗?@Hypn0tizeR是的,但是在欺骗了@epascarello的解决方案之后,我能够消除对
document.queryselectoral()
的需要,因此它对IE更加友好。所以我认为这是他现在正在寻找的解决方案。
var elementgroup = document.getElementsByName("id[]");
var nub= elementgroup[elementgroup .length - 1].split('-')[1];