Я выполняю некоторые тесты на элементе DOM, результат тестов является одним из потомков элементов. например:
<div id="myelement" class="some-class">
<div class="some-child-class"></div>
<div class="some-other-child-class">
<div class="grandchild-class"></div>
<div class="another-grandchild"></div>*
</div>
</div>
допустим, что:
test(document.getElementById('myelement'));
вернет элемент, отмеченный звездочкой
Теперь моя проблема: процедура тестирования тяжелая и ресурсоемкая. Я не хочу запускать его, когда мне это не нужно. И иногда я клонирую элемент, который уже был протестирован (что означает - я KNOW результат теста), но поскольку я получаю ссылку на объект, в результате я не могу использовать его для доступа к соответствующему ребенку на клонированном элементе,
Существует ли какой-либо эффективный способ "сохранить" относительный путь от родительского элемента к определенному потолочному элементу DOM и затем применить его к другому элементу?
Таким образом, вы можете назначать уникальные идентификаторы для каждого элемента и кэшировать результаты теста в объекте на элементе id. Однако я не знаю, полезно ли это. Пример реализации:
var test=function(el){
return this[el.id] || (this[el.id]=advancedtesting(el));
}.bind({});
Таким образом, вы можете сделать:
test(document.getElementById('myelement'));//caches
test(document.getElementById('myelement'));//returns the cached
Вы можете использовать jQuery для этого.
Селекторы, которые они используют, могут иметь форму "nth-child" или "nth-of-type" (см. Документацию здесь).
То, что делает, - это то, что задает дочерний элемент из положения, которое у них относительно, откуда вы начинаете. В вашем случае, если вы хотите начать с первого элемента и перейти к избранному, вы можете сделать следующее:
$('#myelement').find('div:nth-child(2) > div:nth-child(2)')
Это означает, что в качестве базы, на которой вы начнете поиск, требуется # myelement, а затем он переходит ко второму дочернему элементу, который является div, и снова в этот дочерний элемент div. Вы можете повторно использовать этот селектор с другой базой.