javascript - 自动生成唯一的 DOM id?

标签 javascript jquery dom

在使用 JS 和 DOM 编码时,我发现自己经常需要生成 id(或名称),这些 id(或名称)除了将 DOM 元素分组在一起(或关联)外别无他用他们彼此)1.

这些 id(或名称)不会在代码的其他任何地方明确提及,因此它们可以是任何随机字符串,并且对于 id,它们必须是唯一的。

JavaScript 中是否有自动生成唯一 ID 的标准方法?


1在分组(比方说)单选按钮并将它们链接到相关标签时出现了标识符的这种使用情况......

我的(天真的菜鸟)替代像这样编写 HTML 的大脑 NumPy 任务

<input type="radio" name="sys" id="sys-0" value="lnx"> <label for="sys-0"> Linux   </label> <br>
<input type="radio" name="sys" id="sys-1" value="osx"> <label for="sys-1"> OS X    </label> <br>
<input type="radio" name="sys" id="sys-2" value="win"> <label for="sys-2"> Windows </label>

(这需要为每个按钮标签对重复每个基于 sys 的标识符三次)只是写

<div class="button-group" name="sys">
  <input type="radio" value="lnx"> <label> Linux   </label> <br>
  <input type="radio" value="osx"> <label> OS X    </label> <br>
  <input type="radio" value="win"> <label> Windows </label>
</div>

然后使用一些 JS 将按钮分组到一个 name 属性下,并将标签链接到它们各自的按钮:

$('.button-group').each(function (i, e) {
  var name = $(e).attr('name');
  $(e).find(':radio').each(function (j, f) {
    var id = name + '-' + j;
    $(f).attr('name', name)
        .attr('id', id)
      .next()
        .attr('for', id);
  })
});

这很好用,但它仍然需要我为这些按钮组提供名称以及按钮的唯一 ID、名称和 ID,否则这些对我来说毫无用处。我会尽快避免所有这些不必要的命名业务,比如

<div class="button-group">
  <input type="radio" value="lnx"> <label> Linux   </label> <br>
  <input type="radio" value="osx"> <label> OS X    </label> <br>
  <input type="radio" value="win"> <label> Windows </label>
</div>

$('.button-group').each(function (i, e) {
  var name = unique_id();
  $(e).find(':radio').each(function (j, f) {
    var id = unique_id();
    $(f).attr('name', name)
        .attr('id', id)
      .next()
        .attr('for', id);
  })
});

当然,我可以推出我自己的 unique_id 实现,但我想在重新发明这个看起来非常明显的轮子之前我会先问清楚。

最佳答案

我使用的一种方法是

(function(){
    var counter = 0;
    window.uniqueId = function(){
        return 'myid-' + counter++
    }
});

然后

$('.button-group').each(function (i, e) {
  var name = uniqueId();
  $(e).find(':radio').each(function (j, f) {
    var id = uniqueId();
    $(f).attr('name', name)
        .attr('id', id)
      .next()
        .attr('for', id);
  })
});

关于javascript - 自动生成唯一的 DOM id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20060931/

相关文章:

javascript - Cloud Functions for Firebase 在 CORS 预检请求上触发功能

javascript - 使用canvas HTML5 进行图像幻灯片放映

javascript - 从长绳子中取出一段绳子

Jquery img.load 问题

javascript - jquery隐藏/显示特定的li子元素

javascript - 美国城市/州数组的简单方法

javascript - 如何使用 JavaScript 使每个 div 的高度相等?

jquery - 全 Angular 问题第 2 部分

javascript - 使用for循环动态添加div元素

angular - 如何在打印页面之前等待 DOM 完全加载?