Уникальный идентификатор для элементов HTML - PullRequest
25 голосов
/ 21 июля 2010

Помимо идентификатора, если вы говорите, вам нужен уникальный идентификатор для элемента HTML (скажем, div).

Я просматривал DOM для чего-то (например, число или строка), который является уникальнымдля каждого элемента;но DOM велик, и я не смог найти его в Интернете.

Есть ли какое-либо свойство (в DOM, очевидно), уникальное только для этого элемента?(Кроме идентификатора, а также вы не указываете его, но приходит, когда создается DOM)

Ответы [ 6 ]

17 голосов
/ 21 июля 2010

Как говорит Пекка, было бы проще, если бы вы описали, что вы хотите сделать.А пока вот два предложения.

Если вам не нужно выражать идентификатор как какую-то строку, вы можете сохранить обычную ссылку на DOM.

Если вам нужно выразить ее как строкупо какой-то причине вам нужно будет назначить уникальный идентификатор самостоятельно.

var getId = (function () {
  var incrementingId = 0;
  return function(element) {
    if (!element.id) {
      element.id = "id_" + incrementingId++;
      // Possibly add a check if this ID really is unique
    }
    return element.id;
  };
}());
4 голосов
/ 21 июля 2010

Единственный другой идентификатор, который я могу вспомнить, - это XPath элемента в документе.

Например, ссылка заголовка внутри заголовка этой самой страницы имеет XPath

/html/body/div[3]/div[2]/div/h1/a

Но, как уже сказал Пекка, это зависит от того, что вы хотите сделать.И я не думаю, что вы можете легко получить Xpath из DOM в JavaScript, несмотря на то, что Xpath теперь доступен в JS-движках.

2 голосов
/ 11 марта 2015

Internet Explorer имеет свойство «uniqueID» для каждого элемента.Проблема в том, что другие браузеры не поддерживают его.

2 голосов
/ 21 июля 2010

Существует атрибут name, который может быть адресован как document.getElementByName.

Я не думаю, что существуют другие уникальные идентификаторы - даже если вы можете смоделировать один из них, задав свойство (например, title) к уникальному значению, а затем запросите его.Но это глупо.

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

0 голосов
/ 06 июля 2017

Я только что столкнулся с той же ситуацией, и, просматривая некоторые элементы DOM в инспекторе инструментов разработчика Chrome, я заметил, что все они имеют свойство типа jQuery11230892710877873282, которому присваивается уникальный номер. Очевидно, что число после 'jQuery' меняется каждый раз, когда вы загружаете страницу, я предполагаю, что jQuery генерирует это внутренне каждый раз, когда пытается получить доступ или манипулировать любым элементом DOM. Я немного поиграл с ним, и похоже, что элементы, к которым jQuery никогда не обращается и не манипулирует ими, могут не иметь этого свойства, но как только вы сделаете что-то вроде $(elem), свойство будет там. Итак, поскольку мы используем jQuery и lodash, я разработал следующую функцию, которая возвращает уникальный идентификатор независимо от того, имеет ли элемент атрибут DOM id.

_.reduce($(elem), function(result, value, key) { if(_.startsWith(key, 'jQuery')) return value; }, 0)
0 голосов
/ 06 февраля 2015

Вы можете использовать библиотеку или свернуть свою собственную, чтобы создать уникальный идентификатор.JQuery имеет .data () :

Хранить произвольные данные, связанные с сопоставленными элементами, или возвращать значение в названном хранилище данных для первого элемента в наборе сопоставленных элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...