2014-10-05 153 views
9

這是我有:jQuery的生成唯一的ID

<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,但不知道該怎麼做。

+0

是的,所有的鏈接必須有'#nav-link'在結尾 – Mia 2014-10-05 14:25:05

回答

7

爲了生成隨機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> 
+0

感謝您的回覆,但我已經看到了一些如何生成ID的方法,但我不知道如何應用它們 – Mia 2014-10-05 14:29:42

+0

你想添加這個唯一的ID到你的鏈接是? – Beri 2014-10-05 14:31:05

+0

每個'id =「likeLink」'必須是唯一的 – Mia 2014-10-05 14:34:44

2

假設你叫某種循環的代碼,你可以只更換

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

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

這樣「#導航鏈接」在加每個鏈接的結尾。根本不需要JavaScript或jquery:D

+0

PHP在服務器端執行,第一次點擊後我得到一個鏈接,只有第二次點擊後,我得到我的鏈接與標籤 – Mia 2014-10-05 14:31:08

+0

對不起,但我不放棄理解。你可以嘗試多解釋一下。第二次點擊後什麼?什麼時候在服務器上執行PHP?你有某種Ajax嗎? – Martin 2014-10-05 14:39:42

+0

我在PHP數組中有10個鏈接。這些鏈接就像列表一樣顯示在網站上。但是當我點擊這個鏈接時,我只能得到一個沒有任何hashtag的鏈接,因爲PHP在服務器端執行。當我第二次點擊鏈接時,我已經得到我需要的信息 – Mia 2014-10-05 14:48:35

2

我總是使用以下代碼來生成唯一的ID。我這種方法在幾年前發現#2:

/** 
* 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

2

我現在知道這是一歲,但是,業務執行部門表示他不知道如何應用這些ID。這可以使用上面的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()); 
} 
1

我們可以創建爲下劃線使用 uniqueId()元素的獨特ID:

UNIQUEID

_.uniqueId([prefix]) 

生成一個球用於客戶端模型或需要DOM元素的y唯一標識。如果前綴被傳遞,則該id將被附加到它。

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

我並不需要一個真正獨特/隨機ID,只是一些很每頁唯一的,所有這些解決方案似乎矯枉過正我,所以我想出了這個:

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

這是最實用的解決方案,你應該得到更多的選票。 – dim 2017-08-31 19:08:25

2

從v1.9開始,jQueryUI有一個用於創建唯一標識的內建方法,稱爲uniqueId()。

此代碼將在屬於myclass的每個元素上設置唯一的ID。

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

請注意,至少在我的測試中,如果元素已經有一個,則不能分配新的id。

所以這個div會得到一個唯一的ID與上面的Javascript代碼

<div class="myclass"/> 

,但這不會

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

有關更多信息,請參見https://api.jqueryui.com/uniqueId/

+14

請注意,'uniqueId()'是在JQuery UI中添加的,而不是核心庫。 – 2016-04-15 20:13:09

+0

我認爲這應該包括一個回調與ID作爲參數生成的情況下,你想將它存儲在一個數組或東西 – 2018-02-07 13:12:50