我有一些输入,我希望使用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]"]
但是整个事情对我来说似乎有点过分了,如果有更简单的方法我就会徘徊?
答案 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>