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

これは、要素が番号順に並んでいることを前提としています。

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 に答える
2

正規表現またはslice()次のいずれかを使用できます。

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

JS フィドルのデモ

または、スライスを使用:

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

JS フィドルのデモ

ただし、のオプションはslice()、1 桁の数字でのみ機能します。

于 2012-09-06T20:26:32.587 に答える
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ソリューションはまだ少し単純ですが、バニラソリューションはニーズに合うはずです。

于 2012-09-06T20:34:44.317 に答える