Уникальный идентификатор для HTML-элементов
Помимо идентификатора, если вы говорите, вам нужен уникальный идентификатор для элемента HTML (скажем, div).
Я просмотрел DOM для чего-то (например, числа или строки), уникального для каждого элемента; но DOM большой, и я не смог найти это в Интернете.
Есть ли какое-либо свойство (очевидно, в DOM), уникальное только для этого элемента? (За исключением идентификатора, и вы его не укажете, но при создании DOM)
Ответы
Ответ 1
Как говорит Пекка, было бы проще, если бы вы описали то, что хотите. До тех пор вот два предложения.
Если вам действительно не нужно выражать id как какую-то строку, вы можете сохранить нормальную ссылку 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;
};
}());
Ответ 2
Единственным другим идентификатором, о котором я могу думать, является XPath элемента в документе.
Например, ссылка заголовка внутри заголовка этой самой страницы имеет XPath
/html/body/div[3]/div[2]/div/h1/a
Но, как уже сказал Пекка, это зависит от того, что вы хотите сделать. И я не думаю, что вы можете легко получить Xpath из DOM в JavaScript, несмотря на то, что Xpath теперь доступен в JS-машинах.
Ответ 3
Существует атрибут name
, который может быть адресован document.getElementByName
.
Я не думаю, что существуют другие уникальные идентификаторы, даже если вы можете имитировать их, установив для свойства (например, title
) уникальное значение и затем запросите об этом. Но это kludgy.
Для чего вам это нужно? Если вы дадите больше информации о своей ситуации, кто-то, вероятно, придумает предложение.
Ответ 4
Internet explorer имеет свойство "uniqueID" для каждого элемента. Проблема в том, что другие браузеры не поддерживают его.
Ответ 5
Вы можете использовать библиотеку или сворачивать свой собственный, чтобы создать уникальный идентификатор. JQuery имеет . Data():
Хранить произвольные данные, связанные с соответствующими элементами или возвращать значение в названном хранилище данных для первого элемента в наборе согласованные элементы.
Ответ 6
Я столкнулся с одной и той же ситуацией, и, хотя я изучал некоторые элементы DOM в инспекторе инструментов разработчика Chrome, я заметил, что все они имеют свойство типа jQuery11230892710877873282
, присвоенное уникальным номером. Очевидно, что число после "jQuery" отличается каждый раз при загрузке страницы, я предполагаю, что jQuery генерирует это внутренне каждый раз, когда пытается получить доступ или манипулировать любым элементом DOM. Я немного поиграл с ним, и похоже, что элементы, которые никогда не доступны/манипулируются jQuery, могут не иметь этого свойства, но в тот момент, когда вы делаете что-то вроде $(elem)
, свойство будет там. Итак, поскольку мы используем jQuery и lodash, я разработал следующую функцию для возврата уникального идентификатора, независимо от того, имеет ли элемент фактический атрибут DOM.
_.reduce($(elem), function(result, value, key) { if(_.startsWith(key, 'jQuery')) return value; }, 0)