2010-07-21 3 views
25

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

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

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

+2

FWIW, IE предлагает [недвижимость] UniqueID (HTTP: //msdn.microsoft.com/en-us/library/ms534704 \ (VS.85 \) .aspx) объекты DOM, которые при обращении, генерирует уникальный идентификатор для этого элемента. Это не часть спецификации и не поможет вам в других браузерах. –

+0

Я создал [gist] (https://gist.github.com/renaatdemuynck/57b1b78b6611e6d5d866) с помощью прокладки, которая добавляет уникальные функции IE в другие браузеры. –

ответ

17

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

Если вам действительно не нужно выражать идентификатор как какую-то строку, вы можете сохранить нормальную ссылку 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; 
    }; 
}()); 
+0

. Я пошел с аналогичным решением для создания уникальных идентификаторов. Спасибо за информацию. –

+3

Поскольку вы используете jQuery, я должен сообщить вам, что это функция 'data', с помощью которой вы можете назначить какой-либо элемент информации: http://api.jquery.com/data/. Фактически сам jQuery использует unqiue ID для его реализации, однако я не уверен, что можно получить доступ к этому идентификатору любым надежным способом. – RoToRa

2

Атрибут name может быть адресован document.getElementByName.

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

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

+0

Ищете решение, аналогичное функции идентификации в прототипе. К сожалению, я использую jQuery. Думаю, мне лучше сделать, создав свою собственную функцию идентификации. –

4

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

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

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

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

+1

Если бы вы могли получить доступ к этой информации изначально. –

+2

@ Andy Xpath доступен в современных браузерах. Я просто не думаю, что есть способ получить Xpath к узлу какой-то родной функцией. По крайней мере, я ничего не знаю. – Gordon

+0

Извините, я мог бы сказать, что это то, что я имел в виду. –

0

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

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

1

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

+0

В настоящее время IE имеет менее 10% использования во всем мире. – Ant

0

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

_.reduce($(elem), function(result, value, key) { if(_.startsWith(key, 'jQuery')) return value; }, 0) 
+0

Я узнал, что это атрибут jQuery 'expando', более подробная информация об этом здесь: https://stackoverflow.com/questions/3922441/what-is-the-meaning-of-jquery-random-attributes-in -html-Expando-атрибут – AsGoodAsItGets

Смежные вопросы