如何在动态生成元素时避免ID冲突

时间:2011-11-23 11:46:04

标签: javascript jquery

说我有这个模型代码:

    button.click(function(){generateForm();}

     function generateForm(){
     div.append(<input type='text' id='x'>);
  }

我需要ID才能单独访问该元素。

避免在这种情况下出现ID冲突的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

最好使用class代替。但如果您仍然愿意使用id,您可以考虑使用这样的计数器:

   var idCounter = 1;
   function generateForm(){
     div.append("<input type='text' id='x-" + (idCounter++) + "'>");
  }

答案 1 :(得分:2)

如果您绝对需要,可以使用当前时间戳作为ID。

这显然不会产生重复的ID,除非你每毫秒多次调用该函数或者你的用户经常陷入时间错误。

function generateForm(){
    d = new Date();
    div.append('<input type="text" id="unique-id-' + d.getTime() + '" >);
}

编辑:注意unique-id-前缀,因为id不应该只是数字。

答案 2 :(得分:1)

如果您不想跟踪外部计数器,请尝试:

  function makeAVeryRandomId () {
    var d = new Date(),
        a = ["0","1","2","3","4","5","6","7","8","9"],
        i = 10,
        m = '';

    while (i--) {
      m += a[Math.floor(Math.random() * a.length)];
    };

    return d.getTime() + m;
  };

请记住ID s不应以数字开头,因此在随机数前加上一个字母(或两个)。