检查数字是否在元素ID数组中

时间:2014-02-19 20:23:21

标签: jquery html arrays list map

我想在单击按钮时在JQuery中给出元素id但是众所周知,两个元素不应该具有相同的id。所以我创建了一个包含所有当前ID的数组,并检查下一个计算的id是否已经存在。由于某种原因,它没有按预期工作。

我希望它进入一个循环,直到id找到一个尚未使用的数字。所以在下面的代码中,它计算3 <li>并将下一个元素指定为id为4,但是,具有该Id的元素已经存在,因此它应该出现在数组中并进入循环以将1添加到数字,直到找到数组中不存在的数字。任何和所有的帮助表示赞赏!这是fiddle

的JQuery:

$(document).ready(function () {
   $(".addParent").click(function () {

       var IDs = $("#list > li").map(function () {
           return this.id;
       }).get();

       var num = ($("#list").children().length) + 1;

       while (jQuery.inArray(num, IDs) != -1) {
           num++;
      }

       $("#list").append("<li id='" + num + "'><textarea class='inputBelief' rows='1' cols='50'>id is " + num + "</textarea></li>");

       return false;
   });
});

HTML:

<ol id="list">
    <li id='1'>
        <textarea class='inputBelief' rows='1' cols='50'>id is 1</textarea>
    </li>
    <li id='2'>
        <textarea class='inputBelief' rows='1' cols='50'>id is 2</textarea>
    </li>
    <li id='4'>
        <textarea class='inputBelief' rows='1' cols='50'>id is 4</textarea>
    </li>
</ol>
<a class="addParent" href="#">add line</a>

2 个答案:

答案 0 :(得分:0)

在地图功能中执行

return parseInt($(this).prop('id'));

答案 1 :(得分:0)

问题是IDs字符串的数组而不是数字,所以inArray永远不会按预期工作,因为你试图在字符串数组中找到一个数字。尝试将map方法更改为:

var IDs = $("#list li[id]").map(function () {
    return +this.id;
}).get();

演示:http://jsfiddle.net/RmrXq/2/