Я не думаю, что я первый столкнулся с этой проблемой, но я не нашел способа искать это, не получив результатов, которые не имеют никакого отношения к проблеме.
Я принял не слишком распространенную хорошую практику "кэширования" повторяющихся выборок jQuery в переменные типа var element = $('#element');
, чтобы предотвратить "поиск пула DOM" при каждом повторном использовании элемента
У меня проблема в том, что сейчас я делаю это кэширование внутри функции. Что-то вроде:
function functionname (id) {
var id = $('#'+id);
//extra stuff
}
Я не эксперт в области переменных, но не могу сделать
functionname ('some-div-id');
some-div-id.dialog('open');
Так что я уверен, что это потому, что переменная, созданная внутри функции, не доступна вне самой функции.
Тогда я придумал
function functionname (id) {
window.id = $('#'+id);
//extra stuff
}
но если я попытаюсь сделать window.some-div-id.dialog('open');
, я получу TypeError: 'undefined' is not a function
Чего мне не хватает? Я уверен, что это маленькая глупость, но я скучаю по ней прямо перед моими глазами.
Спасибо
EDIT
Спасибо всем, но вы что-то упустили.
В предложениях по коду отсутствует тот факт, что внутреннее «глобальное» имя переменной является динамическим:
var CACHEobject = {};
function doSomething (NAMEHERE) { //note the function parameter
CACHEobject.NAMEHERE = $('#'+NAMEHERE);
}
Таким образом, идея заключается в том, что функция создает переменную javascript с тем же именем, что и #element_id. Если я передаю имя функции, она должна выбрать идентификатор html с этим именем и «кэшировать его» в глобальную переменную с таким же именем:
doSomething('myDialogOne'); doSomething('myDialogTwo');
так что позже я смогу сделать
CACHEobject.myDialogOne.dialog('open'); CACHEobject.myBox.dialog('close');