JQuery генерирует уникальные идентификаторы

Вот что у меня есть:

<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, но не знаю, как это сделать.

Ответ 1

Для генерации случайных идентификаторов вы можете использовать этот.

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

Ответ 2

Мне не нужен вечный уникальный/случайный идентификатор, просто что-то уникальное для каждой страницы, и все эти решения казались мне излишними, поэтому я придумал следующее:

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

Ответ 3

Так как v1.9, jQueryUI имеет встроенный метод для создания уникальных идентификаторов, называемых uniqueId().

Этот код будет устанавливать уникальный идентификатор для каждого элемента, принадлежащего классу myclass.

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

Обратите внимание, что при тестировании, по крайней мере, вы не можете назначить новый идентификатор, если элемент уже имеет его.

Итак, этот div получит уникальный идентификатор с указанным выше кодом Javascript

<div class="myclass"/>

Но это не было бы

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

Подробнее см. https://api.jqueryui.com/uniqueId/

Ответ 4

Предполагая, что вы вызываете код в каком-то цикле, вы можете просто заменить

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

с

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

таким образом "# nav-link" добавляется в конце каждой ссылки. Javascript или jquery не нужны вообще: D

Ответ 5

Я всегда использую следующий код для создания уникальных идентификаторов. Я нашел этот метод несколько лет назад в 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

Ответ 6

Я знаю, что это уже год, однако OP заявила, что не знает, как применять идентификаторы. Это можно легко выполнить с использованием прототипа 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());
}

Ответ 7

Мы можем создать уникальный идентификатор для элементов, используя uniqueInd() в подстроке:

UniqueID

 _.uniqueId([prefix]) 

Создайте глобально уникальный идентификатор для клиентских моделей или элементов DOM, которым он нужен. Если передан префикс, к нему будет добавлен идентификатор.

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