Немного смущен формулировкой вашего вопроса - вы говорите, что вам «нужен строковый идентификатор, который [вы] можете использовать для ссылки на этот элемент позже», но что вы «не можете хранить ссылки в [вашем] скрипте потому что когда они вам понадобятся, сам скрипт GreaseMonkey выйдет из области видимости. "
Если скрипт выйдет из области видимости, то как вы будете ссылаться на них позже?!
Я собираюсь игнорировать тот факт, что меня смущает то, к чему вы клоните, и говорить, что я пишу сценарии Greasemonkey довольно часто, и может изменять элементы DOM, к которым я обращаюсь, чтобы дать им свойство ID , Этот код вы можете использовать для получения псевдо-уникального значения для временного использования:
var PseudoGuid = new (function() {
this.empty = "00000000-0000-0000-0000-000000000000";
this.GetNew = function() {
var fourChars = function() {
return (((1 + Math.random()) * 0x10000)|0).toString(16).substring(1).toUpperCase();
}
return (fourChars() + fourChars() + "-" + fourChars() + "-" + fourChars() + "-" + fourChars() + "-" + fourChars() + fourChars() + fourChars());
};
})();
// usage example:
var tempId = PseudoGuid.GetNew();
someDomElement.id = tempId;
Это работает для меня, я только что проверил это в сценарии Greasemonkey сам.
ОБНОВЛЕНИЕ: Закрытия - это путь, которым я лично являюсь, как опытный разработчик JavaScript, я не знаю, как вы не сразу же подумали об этом. :)
myDomElement; // some DOM element we want later reference to
someOtherDomElement.addEventListener("click", function(e) {
// because of the closure, here we have a reference to myDomElement
doSomething(myDomElement);
}, false);
Теперь myDomElement
- это один из элементов, который, по-видимому, у вас, по вашему описанию, уже есть (поскольку вы думали добавить к нему ID или что-то еще).
Возможно, если вы опубликуете пример того, что вы пытаетесь сделать, вам будет легче помочь, если это не так.