Как я могу проверить элемент html, который исчезает из DOM при потере фокуса?


137

Я пытаюсь проверить свойства CSS из ввода в ячейку таблицы. Ввод появляется при нажатии и исчезает при потере фокуса, как когда я пытаюсь его проверить. Как мне сделать это, чтобы не потерять фокус при переходе в другое окно (инспектор)?



3
нет, решение по этому вопросу здесь не подходит
Rogelio Triviño

1
Решение очень подходящее
Джонатан

2
Есть и другие вопросы, разрешенные с помощью этого ответа, и это была моя первая попытка, но в этой ситуации состояние: focus теряется при переходе из браузера в окно инструментов разработчика Chrome, а также исчезает желаемый элемент для проверки. Я говорю об элементах DOM, которые появляются при нажатии и исчезают при потере фокуса.
Rogelio Triviño,

Ответы:


144

В браузере Chrome откройте Инструменты разработчика и выберите вкладку «Элементы» , затем откройте контекстное меню родительского узла элемента, который вы хотите проверить, в контекстном меню нажмите « Разбить на > Изменения поддерева» .

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

введите описание изображения здесь


5
В FF тоже есть способ?
чувак

2
спасибо, после того, как часы заблокированы, я получил это решение и решил написать здесь вопрос и решение, со временем это мой главный источник репутации здесь, вы знаете, у меня нет времени на вопросы типа "как вы можете сделать 2 + 2 на java? "
Rogelio Triviño

Как найти родительский узел элемента, который нужно проверить? У меня есть кнопка, на которую я нажимаю, чтобы открыть элемент в инспекторе, но всплывающее окно, очевидно, не связано с DOM.
Майкл

да, иногда javascript создает новые элементы непосредственно под телом или соответствующими верхними элементами DOM. Если с вашим кодом нет проблем, вы должны знать, где ваш javascript создает эту вещь, если нет, возможно, вы должны сломать модификации поддерева BODY и проверить инструменты разработчика, где именно создаются новые элементы dom (не обязательно parent)
Rogelio Triviño

Для тех, кто не понимает, что такое контекстное меню, это меню из трех точек в крайнем левом углу узла dom.
palerdot

92

Вы можете захватить исчезающий элемент, если приостановите выполнение JavaScript с помощью сочетания клавиш, не перемещая мышь. Вот как это сделать в Chrome:

  1. Откройте Инструменты разработчика и перейдите в Источники.
  2. Обратите внимание на ярлык для приостановки выполнения скрипта - F8.

    Приостановить выполнение скрипта

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

  4. Хит F8.
  5. Как вы можете перемещать мышь, проверять DOM, что угодно. Элемент останется там.

Этот трюк работает также в Firefox и других современных браузерах.


12
Это отлично подходит для многих задач, но некоторые сценарии все равно будут запускаться до того, как отладчик будет заблокирован. Например, мое поле выбора автозаполнения скрывает все варианты выбора до того, как скрипты будут приостановлены, что очень затрудняет настройку стилей в интерактивном режиме.
Мир

К сожалению, это лишь намек на хром, но я решил, почему попробовал сам.
webwake

1
@webwake, да, этот конкретный пример находится в Chrome, но большинство современных браузеров позволяют приостанавливать выполнение скрипта с помощью сочетания клавиш.
mxxk

Это сработало отлично и было так просто! Примечание: это `⌘ +`, чтобы приостановить выполнение скрипта в Chrome для Mac.
Jordan Gray

1
Приятно слышать @JordanGray. Вы имели в виду -backslash? Для меня это говорит и о том, и о F8работе.
mxxk

73

Если ничего не помогает, введите это в консоли:

setTimeout(() => { debugger; }, 5000)

Затем у вас есть 5 секунд (или измените значение на любое другое), чтобы отобразить все, что вы хотите отладить.

Ни один из других ответов не сработал для меня - дерево DOM продолжало изменяться (то есть вещи, которые мне небезразличны, исчезли) прямо перед остановкой скрипта.


7
Это решение довольно хакерское, но оно действительно работает! Спасибо!
Manjar

1
Самое надежное простое решение из всех.
Джеймс

13

Не уверен, работает ли это в вашей ситуации, но обычно (и в каждом случае стоит упомянуть в этом отношении, поскольку это отличный инструмент) в Chrome Developer Tools вы можете моделировать состояния элементов, и один из них также :focus.

Для этого перейдите на Elementsвкладку в инструментах разработчика и убедитесь, что вы находитесь в Stylesразделе справа (это должно быть расположение по умолчанию при запуске инструментов разработчика). Теперь просто выберите стили в правом верхнем углу, у вас есть значок Toggle Element State. При нажатии на нее вы можете моделировать :active, :hover, :focusи :visitedдля элемента вы выбрали на левой в вашем представлении кода.

введите описание изображения здесь


3
Есть и другие вопросы, разрешенные с помощью этого ответа, и это была моя первая попытка, но в этой ситуации состояние: focus теряется при переходе из браузера в окно инструментов разработчика Chrome
Rogelio Triviño

9

В Chrome на странице инструментов разработчика для тестируемой страницы ... щелкните меню параметров и откройте настройки для предпочтений ... в разделе DevTools включите 'Эмулировать целевую страницу'

Затем на тестовой странице вызывают появление элементов. Это сработало, чтобы мои всплывающие результаты поиска оставались на экране, чтобы я мог работать с ними.


8

Не настоящее решение, но обычно работает (:

  1. Сфокусируйте элемент
  2. Щелкните правой кнопкой мыши для контекстного меню
  3. Перейти к инструментам разработчика

Проверка фокусируемого ввода


1
по-прежнему работает в Chrome с января 2020 года, спасибо за это! хорошее обходное решение
манро

2

У меня была очень сложная ситуация, и здесь не было ответа (я не проверял ответы, меняющие контейнер, который является для меня телом или исходным событием, потому что я этого не знаю). Я наконец нашел обходной путь, взломав контрольные точки прослушивателя событий в Chrome Inspector. Возможно, это также кроссбраузерный способ взлома для сложных ситуаций, когда даже F8 или щелчок правой кнопкой мыши снова скрывают всплывающее окно:

введите описание изображения здесь


1

Вставьте следующий код Javascript в консоль разработчика браузера:

// Delayed console log of parent element with disappearing child element(s)
// Once code is trigger, you have 3 seconds to trigger the hidden element before it snapshots.
// The hidden elements should appear in the console ready to inspect.

var timer = 3000; //time before snapshot
var parent_of_element_to_inspect = 'div.elementcontainer'; //container of element to snapshot
setTimeout(function(){
 console.log(document.querySelector(parent_of_element_to_inspect).cloneNode(true));
},timer);

0

У меня есть более быстрое решение, так как я не очень хорошо использую инструменты, вот что я делаю.

event.originalEvent.preventDefault();
event.originalEvent.stopImmediatePropagation();
event.originalEvent.stopPropagation();

-1

Если вы откроете Chrome DevTools, а затем запустите инспектор элементов с помощью сочетаний клавиш, это должно решить проблему.

Mac: Cmd+Opt+J а затемCmd+Opt+C

Windows: Ctrl+Shift+J а затемCtrl+Shift+C

[1]

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.