2014-10-05 22 views
9

Hier ist, was ich habe:jQuery erzeugen eindeutige IDs

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

Es ist ein PHP-Array, das einige Links enthält. Ich muss einen zusätzlichen Hash-Parameter #nav-link am Ende jedes Links hinzufügen.

Hier ist, wie ich versuchte es:

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

Aber dieser Code funktioniert nicht, weil jQuery nicht wissen, was ich die Verknüpfung verknüpft. Also ich denke, dass ich die einzigartige ids generieren muss, aber nicht weiß, wie es geht.

+0

Ja, müssen alle Verbindungen haben '# nav-link' am Ende – Mia

Antwort

7

Zum Generieren von zufälligen IDs können Sie diese verwenden.

<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

Danke für die Antwort, aber ich sah bereits ein paar Methoden, wie die IDs zu generieren, aber ich weiß nicht, wie Sie sie anwenden – Mia

+0

Sie möchten diese eindeutige ID zu Ihrem Link hinzufügen? – Beri

+0

Jeder 'id =" likeLink "' muss eindeutig sein – Mia

2

Unter der Annahme, dass Sie den Code in einer Art Schleife nennen, könnte man einfach ersetzen

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

mit

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

auf diese Weise "# nav-Link" wird bei der addierte Ende jedes Links. Kein Javascript oder Jquery überhaupt benötigt: D

+0

PHP wird auf der Serverseite ausgeführt und nach dem ersten Klick bekomme ich einen Link, und erst nach dem zweiten Klick bekomme ich meinen Link mit Hashtag – Mia

+0

Sorry, aber ich höre nicht auf zu verstehen. Können Sie versuchen, ein wenig mehr zu erklären. Nach dem zweiten Klick auf was? Wann wird PHP auf dem Server ausgeführt? Hast du eine Art Ajax? – Martin

+0

Ich habe 10 Links im PHP-Array. Diese Links werden auf der Site wie eine Liste angezeigt. Aber wenn ich auf den Link klicke, bekomme ich nur einen Link ohne Hashtag, da PHP auf der Serverseite ausgeführt wird. Wenn ich zum zweiten Mal auf den Link klicke, bekomme ich schon, was ich brauche – Mia

2

Ich verwende immer folgenden Code, um eindeutige IDs zu generieren.

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

Und Sie sind in der Lage zu finden, andere nützliche js Helfer in meiner Bibliothek:: Ich habe diese Methode einige Jahre auf Stackoverflow vor gefunden https://github.com/mazong1123/neatjs

2

Ich weiß, das jetzt ein Jahr alt ist, aber, Das OP erklärte, er wüsste nicht, wie die IDs anzuwenden seien. Dies kann leicht unter Verwendung des oben beschriebenen Rand-Prototyps von beri erreicht werden.

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

oder mit einem viel breiteren Pinsel:

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

Wir können für die Elemente eine eindeutige ID erstellen uniqueId() in Unders mit:

UniqueId

_.uniqueId([prefix]) 

Erzeugen Sie ein globall y-eindeutige ID für clientseitige Modelle oder DOM-Elemente, die eines benötigen. Wenn Präfix übergeben wird, wird die ID an es angehängt.

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

Ich brauche nicht eine für immer einzigartig/random-ID, nur etwas, das pro Seite einzigartig war, und alle diese Lösungen schien für mich übertrieben, so kam ich mit auf den Punkt:

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

Dies ist die pragmatischste Lösung, Sie verdienen mehr Stimmen. – dim

2

Seit v1.9 verfügt jQueryUI über eine integrierte Methode zum Erstellen eindeutiger IDs namens uniqueId().

Dieser Code wird eine eindeutige ID für jedes Element von Myclass festlegen.

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

anzumerken, dass in meinen Tests zumindest, können Sie nicht eine neue ID vergeben, wenn das Element bereits einen hat.

Also dieses div würde eine eindeutige ID mit der oben Javascript-Code

<div class="myclass"/> 

bekommen, aber dies würde nicht

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

https://api.jqueryui.com/uniqueId/ Weitere Informationen finden Sie

+14

Hinweis: 'uniqueId()' wurde in JQuery UI und nicht in der Core-Bibliothek hinzugefügt. –

+0

Ich denke, das sollte einen Rückruf mit der ID enthalten, die als Parameter generiert wird, falls Sie sie in einem Array oder etwas speichern wollen –

Verwandte Themen