选择器根据名称数组索引

时间:2015-09-02 15:52:40

标签: jquery

我有一些输入,我希望使用jQuery为其名称属性选择具有最高数组索引的那个

<input name="option[3]"/>
<input name="option[2]"/>
<input name="option[8]"/> <!-- <-----   -->
<input name="option[4]"/>
<input name="option[1]"/>
<input name="option[5]"/>

我能够通过以下代码实现这一目标:

var options = [];

    $('[name]').filter(function (i, e) {
        return $(e).attr('name').match(/option\[\d+/)  // [name=option[n
    }).each(function (i, e) {
        options.push($(e).attr('name').replace(/option\[(\d+)\]/, '$1')); // [3,2,8,4,1,5]
    });

    options.sort(); // [1,2,3,4,5,8]

    var $option = $('[name="option[' + 
                      options.slice(options.length - 1, options.length) +
                     ']"]'); // [name="option[8]"]

但是整个事情对我来说似乎有点过分了,如果有更简单的方法我就会徘徊?

2 个答案:

答案 0 :(得分:2)

三行代码可以做到:

var ary = [];
$('input').each(function(){ ary.push($(this).attr('name').match(/\d+/g)[0]) })
$('input[name=option\\['+ Math.max.apply(null, ary)+'\\]]').css('background','red')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input name="option[3]"/>
<input name="option[2]"/>
<input name="option[8]"/> 
<input name="option[4]"/>
<input name="option[1]"/>
<input name="option[5]"/>

第一行声明一个空数组。

第二行迭代输入并使用简单的正则表达式将数字从name属性的值推送到数组

最后一行使用Match.max选择输入以从数组中选择最大数字

答案 1 :(得分:1)

var $test = $("input[name^=option]").sort(function(a,b){
    var aID = a.name.replace(/option\[(\d+)\]/, '$1');
    var bID = b.name.replace(/option\[(\d+)\]/, '$1');
    return aID < bID ? -1 : 1;
});
$test.last().remove();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div id="a">
<input name="option[3]" value="3"/>
<input name="option[2]" value="2"/>
<input name="option[8]" value="8"/> 
<input name="option[4]" value="4"/>
<input name="option[1]" value="1"/>
<input name="option[5]" value="5"/>
</div>