Сделайте функцию, чтобы видеть только определенную часть DOM

0

В настоящий момент я использую следующий код, чтобы получить путь к выбранному элементу

if (!(el instanceof Element)) return;
        var path = [];
        while (el.nodeType === Node.ELEMENT_NODE) {
            var selector = el.nodeName.toLowerCase();
            if (el.id) {
                selector += '#' + el.id;
            } else {
                var sib = el, nth = 1;
                while (sib.nodeType === Node.ELEMENT_NODE && (sib = sib.previousSibling) && nth++);
                selector += ":nth-child("+nth+")";
            }
            path.unshift(selector);
            el = el.parentNode;
        }
        return path.join(" > ");

Он возвращает мне правильный путь в контексте моей полной html-страницы. Однако я хочу, чтобы эта функция работала не на всей странице, а в контексте небольшой области моей html-страницы. Как ограничить эту функцию, чтобы работать, скажем, внутри некоторого div # id?

  • 1
    Просто добавьте условие && (!el.id || el.id !== SOMEID) в цикл while?
  • 0
    поиск в Интернете jquery custom events и привязка / запуск пользовательских событий при необходимости
Показать ещё 1 комментарий
Теги:
dom

2 ответа

1
Лучший ответ

Однако я хочу, чтобы эта функция работала не на всей странице, а в контексте небольшой области моей html-страницы. Как ограничить эту функцию, чтобы работать, скажем, внутри некоторого div # id?

Похоже, вам просто нужно прекратить движение по дереву, как только вы достигнете этого конкретного элемента. В зависимости от того, передал ли вы идентификатор или элемент своей функции, вы можете:

while (el.nodeType === Node.ELEMENT_NODE && (!el.id || el.id !== SOME_ID)) {

или

while (el.nodeType === Node.ELEMENT_NODE && el !== SOME_ELEMENT) {
  • 0
    Есть ли простой способ получить что-то вроде el.tagName != "table" ?
  • 0
    Конечно, вы можете сравнить любое свойство элемента, который вы хотите.
0

Вы не можете, по крайней мере, не использовать DOM API.

DOM API позволяет вам перемещаться по всему DOM, вы можете подняться как можно дальше. Если у вас есть ссылка на document вы можете что-либо сделать.

Способ ограничения доступа - это написать оболочку для DOM API. Эта оболочка будет иметь необходимую функциональность, которая может включать в себя: создание новых узлов DOM, удаление узлов DOM, настройку свойств на узлах DOM. Но вы не сможете свободно ходить по дереву DOM (потому что это нарушает желаемую инкапсуляцию).

Детали такой обертки довольно сложны, и есть много вариантов сделать. Я использую встроенную инфраструктуру, которая сочетает это с обозначением виджетов, и это довольно хорошо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню