使用jQuery获取最低可用字段名称

时间:2014-09-05 17:58:07

标签: javascript jquery

我有一个表单,其中字段的名称类似于data[Field][0][value], data[Field][1][value]等等,其中整数递增但其余字段保持不变。有没有办法找到jQuery最低的可用整数值?

我的表单使用JS动态添加和删除字段(其中一些是由页面加载时的PHP后端创建的),所以我需要最小的整数,以便创建没有冲突的字段。

现在,在页面加载时,我将field_count设置为$( "input[name$='[value]'" ).length;,然后在创建输入时将其递增。这可以防止任何命名空间冲突,但是它不会考虑删除的输入:我希望能够重用已删除字段的名称。

3 个答案:

答案 0 :(得分:1)

如果您可以解决data[Field][0] ... data[Field][n],那么我会说data[Field]Arraydata[Field].length会返回Array的当前长度。在这种情况下,最后一个值将在data[Field][data[Field].length-1]中,下一个可用的整数(索引)将是data[Field].length

只是为了好玩并展示另一种选择:如果你放弃了命名方案&#39;并使用数据属性来跟踪输入字段,例如<input type="text" data-idx="1">您可以使用方法动态确定可用的最低插槽:

function getFreeSlot(inputFields) {
  var freeslots = []
     ,idxs      = inputFields.map(
                     function (i, el) { return +$(el).attr('data-idx');}
                   ).toArray()
  idxs.every( function (v,i) {
                void( v-(i ? 1 : 0) !== this[(i>0 ? i-1 : 0)]
                      && freeslots.push(this[(i>0 ? i-1 : 0)]+1) );
                return v; }, idxs );
  return freeslots.length ? freeslots[0] : idxs.length+1;
}

Working example

答案 1 :(得分:1)

假设您的描述属于页面上动态创建/销毁字段的name属性(换句话说,<input name="Data[Field][0][value]">):

var $lastField = $('[name^=Data\\[Field\\]\\[][name$=\\]\\[value\\]]').last();
var lastField = $lastField[0];

这应该得到DOM中的最后一个元素,其名称与正则表达式Data[Field][.*][value]匹配。如果你想确保中间位是一个数字,你需要更多地参与:

var $lastField = $('[name^=Data\\[Field\\]\\[').filter(function(idx, element) {
    return /Data\[Field\]\[[0-9]+?\]\[value\]/.test($(this).attr('name'));
}).last();
var lastField = $lastField[0];

答案 2 :(得分:1)

您是否可以保留已删除元素的列表,然后只需弹出列表中的一个,以便在需要创建新元素时使用(如果列表为空,只需按现在的步骤增加field_count)