Уникальный идентификатор для элементов HTML
Помимо идентификатора, если вы говорите, вам нужен уникальный идентификатор для элемента HTML (скажем, div).
Я просмотрел DOM для чего-то (например, числа или строки), уникального для каждого элемента; но DOM большой, и мне не удалось найти это в Интернете.
Есть ли какое-либо свойство (очевидно, в DOM), уникальное только для этого элемента? (Кроме идентификатора, а также вы не указываете его, но приходит, когда DOM создается)
6 ответов
Как говорит Пекка, было бы проще, если бы вы описали, что вы хотите сделать. До тех пор вот два предложения.
Если вам на самом деле не нужно выражать идентификатор как какую-то строку, вы можете сохранить обычную ссылку на 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;
};
}());
Единственный другой идентификатор, который я могу вспомнить, - это XPath элемента в документе.
Например, ссылка заголовка внутри заголовка этой самой страницы имеет XPath
/html/body/div[3]/div[2]/div/h1/a
Но, как уже сказал Пекка, это зависит от того, что вы хотите сделать. И я не думаю, что вы можете легко получить Xpath из DOM в JavaScript, несмотря на то, что Xpath в настоящее время доступен в движках JS.
У Internet Explorer есть свойство "уникальный идентификатор" для каждого элемента. Проблема в том, что другие браузеры не поддерживают его.
Вы можете использовать библиотеку или свернуть свою собственную, чтобы создать уникальный идентификатор. JQuery имеет .data ():
Сохраните произвольные данные, связанные с сопоставленными элементами, или верните значение в именованном хранилище данных для первого элемента в наборе сопоставленных элементов.
Я только что столкнулся с такой же ситуацией, и, просматривая некоторые элементы 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)
Здесь name
атрибут, который может быть адресом document.getElementByName
,
Я не думаю, что существуют другие уникальные идентификаторы - даже если вы можете смоделировать один, установив свойство (например, title
) к уникальному значению, а затем запросите его. Но это глупо.
Для чего именно это нужно? Если вы дадите больше информации о вашей ситуации, кто-то, вероятно, предложит предложение.