【问题标题】:jQuery generate unique IDsjQuery 生成唯一 ID
【发布时间】:2014-10-05 14:19:51
【问题描述】:

这是我所拥有的:

<a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a>

这是一个 PHP 数组,其中包含一些链接。我需要在每个链接的末尾添加一个额外的哈希参数#nav-link

这是我尝试的方法:

<a id="likeLink" href=""><?=$arItem["TEXT"]?></a>
<script>
    $(document).ready(function () {
        $("#likeLink").attr("href", <?=$arItem["LINK"]?> + "#nav-link");
    });
</script>

但是这段代码不起作用,因为 jQuery 不知道我链接到哪些链接。所以我想我需要生成唯一的ids,但不知道该怎么做。

【问题讨论】:

  • 是的,所有链接末尾必须有#nav-link

标签: javascript php jquery


【解决方案1】:

我不需要一个永远唯一/随机的 id,只需要每页唯一的东西,所有这些解决方案对我来说似乎都是多余的,所以我想出了这个:

var uniqId = (function(){
    var i=0;
    return function() {
        return i++;
    }
})();

【讨论】:

  • 这是最务实的解决方案,你应该得到更多的投票。
  • 不起作用,返回“返回脚本(函数...”
【解决方案2】:

要生成随机 id,您可以使用这个。

<script type="text/javascript">
function Generator() {};

Generator.prototype.rand =  Math.floor(Math.random() * 26) + Date.now();

Generator.prototype.getId = function() {
   return this.rand++;
};
var idGen =new Generator();
</script>
</html>
<body>
<!-- Place this in the body of the page content -->

   <button onclick="console.log(idGen.getId())">click</button>

</body>

【讨论】:

  • 感谢您的回复,但是我已经看到了一些如何生成ID的方法,但我不知道如何应用它们
  • 根据我的代码,例如10个id相同的链接,代码不能正常工作,因为每个链接的id都必须是唯一的
  • 我谦虚的例子。每次通过简单的递增返回另一个数字。你可以随心所欲地使用它。它在javascript中使用静态方法:)
  • 我喜欢添加一些不懂的东西的程序员。这个函数和没有Math.random() 一样随机,因为你得到的是毫秒时间。添加 0 到 25 之间的随机数不会使其变得更加随机。
  • 在我的回答中,我提出了一个随机生成器,而不是增量生成器,所以我的回答对我的代码是正确的。如您所知,毫秒只会增长,因此它们不是“完全随机的”。
【解决方案3】:

从 v1.9 开始,jQueryUI 有一个用于创建唯一 ID 的内置方法,称为 uniqueId()。

此代码将为属于 myclass 的每个元素设置一个唯一的 id。

$(".myclass").each(function () {
    $(this).uniqueId();
});

请注意,至少在我的测试中,如果元素已经有一个,你不能分配一个新的 id。

所以这个 div 会通过上面的 Javascript 代码获得一个唯一的 id

<div class="myclass"/>

但这不会

<div class="myclass" id="myId"/>

更多信息请参见https://api.jqueryui.com/uniqueId/

【讨论】:

  • 注意,uniqueId() 是在 JQuery UI 中添加的,而不是核心库。
  • 我认为这应该包括一个带有作为参数生成的 ID 的回调,以防你想将它存储在数组或其他东西中
【解决方案4】:

我总是使用以下代码来生成唯一 ID。几年前我在 Stackoverflow 上发现了这种方法:

 /**
 * Create a random Guid.
 *
 * @return {String} a random guid value.
 */
newGuid: function() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,
    function(c) {
      var r = Math.random() * 16 | 0,
        v = c == 'x' ? r : (r & 0x3 | 0x8);
      return v.toString(16);
    }).toUpperCase();
}

您还可以在我的库中找到其他有用的 js 助手: https://github.com/mazong1123/neatjs

【讨论】:

  • 我试过这个,如果你一次发布多个 5 个东西,它创建唯一 ID 失败。你能提供一个更好的吗?
【解决方案5】:

我们可以为元素创建一个唯一的 id 使用 uniqueId() 下划线:

uniqueId

 _.uniqueId([prefix]) 

为需要的客户端模型或 DOM 元素生成一个全局唯一的 id。如果 prefix 被传递,id 将被附加到它。

_.uniqueId('contact_');
=> 'contact_104'

【讨论】:

    【解决方案6】:

    假设你在某种循环中调用代码,你可以替换

    <a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a>
    

    <a href="<?=$arItem["LINK"]?>#nav-link"><?=$arItem["TEXT"]?></a>
    

    这样,“#nav-link”就会添加到每个链接的末尾。根本不需要 javascript 或 jquery :D

    【讨论】:

    • PHP 正在服务器端执行,第一次点击后我得到一个链接,只有在第二次点击后我才得到带有标签的链接
    • 对不起,我不明白。你能试着解释一下吗。第二次点击后是什么? PHP 什么时候在服务器上执行?你有某种 Ajax 吗?
    • 我在 PHP 数组中有 10 个链接。这些链接就像列表一样显示在网站上。但是当我点击链接时,我只得到一个没有任何标签的链接,因为 PHP 在服务器端执行。当我第二次点击链接时,我已经得到了我需要的东西
    • “当我第二次点击链接时,我已经得到了我需要的东西”是什么意思。当您再次加载页面或在不同的页面上时,您是否不想要哈希?
    【解决方案7】:

    我知道这已经一岁了,但是,OP 表示他不知道“如何”应用 ID。这可以使用上面beri 的 rand 原型轻松完成。

    /// insure ALL myClass elements have a unique ID. 
    if(!$('.myClass').attr("id")){
        $('.myClass').attr("id",idGen.getId());
        console.log($('.myClass').attr("id"));
    }
    

    或使用更广泛的画笔:

    /// insure ALL anchor tags have a unique ID. 
    if(!$('a').attr("id")){
        $('a').attr("id",idGen.getId());
    }
    

    【讨论】:

      猜你喜欢
      • 2012-02-22
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 2011-06-20
      相关资源
      最近更新 更多