Как выбрать самый внешний ‘#document’ в DOM

#javascript #html #dom #salesforce

#javascript #HTML #dom #salesforce

Вопрос:

Я пытаюсь добавить класс в тело следующим образом:

 const body = document.querySelector('body');
body.classList.add('someClass');
  

Проблема в том, что у меня есть другой «#document» в iframe, в котором также есть элемент body. Таким образом, он добавляет в него точно такой же класс. Как мне выбрать самый внешний #document и добавить класс только к элементу body в этом документе?

Я попытался посмотреть на разницу в списке классов, выполнив это:

 if (body.classList.contains('somethingThatShouldntBeThere')) {
   body.classList.add('someClass');
}
  

Это не сработало. Похоже, что javascript добавляет класс ко ВСЕМ телам в DOM. Есть идеи?

PS. И, пожалуйста, обратите внимание, что это на странице Salesforce, я внедряю этот javascript. Поэтому я не могу контролировать исходный код.

Комментарии:

1. It seems like the javascript adds the class to ALL bodies in the DOM Он не должен — querySelector будет выбирать только один элемент. Может быть, ваш JS работает как в iframe, так и на родительской странице, что приводит к изменению обоих?

2. Это скорее звучит так, как будто скрипт выполняется на обеих страницах. querySelector будет выбран только первый найденный элемент.

3. Хм, да, этот код выполняется в расширении Chrome. Это должно быть так, это не похоже на querySelectorAll

4. Попробуйте обернуть свой код внутрь if (parent === null) { ... } , чтобы он не запускался на странице в iframe.

5. о, это хорошая идея. Позвольте мне попробовать это.