Этот ответ не удовлетворяет первоначальному описанию вопроса, однако он отвечает на заглавный вопрос.Я пришел к этому вопросу в поисках способа получить уникальный селектор для элемента, но у меня не было необходимости в том, чтобы селектор был действительным между загрузками страниц.Итак, мой ответ не будет работать между загрузками страниц.
Мне кажется, что модификация DOM не идеальна, но это хороший способ создать селектор, который уникален без множества кода.Я получил эту идею после прочтения ответа @ Eli:
Назначьте пользовательский атрибут с уникальным значением.
$(element).attr('secondary_id', new Date().getTime())
var secondary_id = $(element).attr('secondary_id');
Затем используйте этот уникальный идентификатор для создания селектора CSS.
var selector = '[secondary_id='+secondary_id+']';
Тогда у вас есть селектор, который выберет ваш элемент.
var found_again = $(selector);
И многие хотят проверить, чтобы убедиться, что в элементе уже нет атрибута secondary_id
.
if ($(element).attr('secondary_id')) {
$(element).attr('secondary_id', (new Date()).getTime());
}
var secondary_id = $(element).attr('secondary_id');
Собираем все вместе
$.fn.getSelector = function(){
var e = $(this);
// the `id` attribute *should* be unique.
if (e.attr('id')) { return '#'+e.attr('id') }
if (e.attr('secondary_id')) {
return '[secondary_id='+e.attr('secondary_id')+']'
}
$(element).attr('secondary_id', (new Date()).getTime());
return '[secondary_id='+e.attr('secondary_id')+']'
};
var selector = $('*').first().getSelector();