Выборка в DOM с кешированием результата

248
22 августа 2017, 15:33

Как реализуется функция выборки элементов в DOM, с последующим кешированием? По сути задача не сложная, создать объект для сохранения результатов и писать туда, но столкнулся с несколькими проблемами, на которые не нашел ответа самостоятельно.
Вариант 1:

function getDomElem(func) {
  var cache = {};
  // целевой объект поиска передаем в параметре
  return function (target, selector) {
    if (!(selector in cache)) {
      cache[selector] = func.call(target, selector);
    }
    return cache[selector];
    console.log(cache);
  };
} 

Использование:

// сделаем поиск на основе querySelector
var getElem = getDomElem(Document.prototype.querySelector);
var g = getElem(document, 'div');
// получим div как и задумано
var h = getElem(g, 'p');
// ошибка!!!! Uncaught TypeError: Illegal invocation
console.log(g, h)

Вариант 2:

function getDomElem(func) {
  var cache = {};
  return function (selector) {
    if (!(selector in cache)) {
      // хочу сделать объектом поиска текущий объект на котором была вызвана функция
      cache[selector] = func.call(this, selector);
    }
    return cache[selector];
    console.log(cache);
  };
}
var getElem = getDomElem(Document.prototype.querySelector);
var g = document.getElem('div');
// ошибка!!! Uncaught TypeError: document.getElem is not a function
READ ALSO
Проблема с width в owl carousel 2.2.1

Проблема с width в owl carousel 2.2.1

Всем доброго вечераВозникла проблема с owl carousel, при первой загрузке страницы width равен 0 и, естественно, слайдер не отображается

405
Как проверить поддержку браузером spread operator'а?

Как проверить поддержку браузером spread operator'а?

Возможно ли в JavaScript проверить, поддерживает ли браузер spread operator? Будет ли в этом браузере работать следующая конструкция?

357
Слежение за изменениями DOM в iframe

Слежение за изменениями DOM в iframe

Родительская страница и iframe лежат на одном доменеКаким образом можно установить в documentElement iframe MutationObserver?

282
приём multipart/mixed в angularjs

приём multipart/mixed в angularjs

Не найду в документации и в поиске такой сценарий работыКлиент отправляет одну или несколько команд в одном запросе, а сервер отвечает по мере...

273