jQuery生成唯一ID

18

我有以下内容:

<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 结尾。 - Mia
7个回答

39

我不需要一个永久的唯一/随机ID,只需要每页都是唯一的东西,而且这些解决方案似乎对我来说都过于复杂了,所以我想出了这个方法:

const uniqId = (() => {
    let i = 0;
    return () => {
        return i++;
    }
})();

// usage:
uniqId(); // 0
uniqId(); // 1
uniqId(); // 2
// ...

5
这是最实际的解决方案,你应该获得更多的投票。 - dim
不起作用,返回“返回脚本(函数…” - Karra Max
尝试:var uniq = function() {var self=this; self.i = 0; self.next = function(){return self.i++;}};. 使用:var u = new Uniq(); u.next(); - user1005939

18

您可以使用此代码来生成随机的 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的方法,但我不知道如何应用它们。 - Mia
根据我的代码,我有10个具有相同ID的链接,但是代码无法正常工作,因为每个链接的ID必须是唯一的。 - Mia
1
我的简单示例。每次通过简单递增返回另一个数字。您可以随意使用它。它在JavaScript中使用静态方法:) - Beri
我喜欢那些添加自己不理解的额外内容的程序员。这个函数和没有 Math.random() 一样随机,因为它使用了毫秒时间。在0到25之间添加一个随机数并不能使它更加随机。 - kpull1
1
在我的回答中,我提出了一个随机生成器,而不是一个增量生成器,因此我的答案符合我的代码。正如你所知,毫秒只会增加,因此它们并不是“完全随机”的。 - Beri
我只是在说,有时候加上随机数反而不太随机。甚至有时候会比没有随机数的情况下更少一些随机性。想象一下,你用 Math.random() * 26 得到了一个25,然后3毫秒后你又得到了同样表达式的22。你可能会得到两个相同的数字。如果你去掉这些随机因素,代码会更好、更快。这就是为什么我说你添加了你不理解的东西。 - kpull1

13

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

下面这段代码将为属于myclass的每个元素设置一个唯一的id。

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

请注意,至少在我的测试中,如果元素已经有一个ID,则无法分配新的ID。

因此,使用上述JavaScript代码将为此

分配一个唯一的ID。

<div class="myclass"/>

但这并不会

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

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


22
注意,uniqueId()是在JQuery UI中添加的,而不是核心库。 - Nathan Lee
我认为这应该包括一个回调函数,其中生成的ID作为参数,以便在需要将其存储在数组或其他地方时使用。 - Loveen Dyall

9
我通常使用以下代码来生成唯一的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。你能提供更好的方法吗? - Izac Mac

4
我们可以使用Underscore中的uniqueId()为元素创建唯一的ID:

uniqueId

 _.uniqueId([prefix]) 

Generate a globally-unique id for client-side models or DOM elements that need one. If prefix is passed, the id will be appended to it.

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

2

我知道现在已经过去一年了,但是原帖中提到他不知道“如何”应用这些ID。可以使用rand原型轻松完成此操作,由上方beri提供的示例代码如下:

/// 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());
}

2
假设您在某种循环中调用代码,您可以直接替换
<a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a>

使用

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

这样每个链接的末尾都会添加"#nav-link"。完全不需要使用JavaScript或jQuery :D


PHP在服务器端执行,第一次点击后我会得到一个链接,只有第二次点击后才会得到带有哈希标记的链接。 - Mia
抱歉,我不太明白。你能再详细解释一下吗?第二次点击什么时候发生?PHP是在服务器上执行的吗?你有使用 Ajax 吗? - Martin
我在 PHP 数组中有 10 个链接。这些链接在网站上显示为列表。但是当我点击链接时,我只得到一个没有哈希标记的链接,因为 PHP 在服务器端执行。当我第二次点击链接时,我已经得到了我需要的内容。 - Mia
“当我第二次点击链接时,我已经得到了我需要的东西”这句话是什么意思?你是不是不想在再次加载页面时获取哈希值,还是你已经进入了另一个页面? - Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接