Jak mogę sprawdzić element html, który znika z DOM po utracie fokusu?


137

Próbuję sprawdzić właściwości CSS z danych wejściowych do komórki tabeli. Dane wejściowe pojawiają się po kliknięciu i znika po utracie ostrości, tak jak przy próbie sprawdzenia. Jak mogę to zrobić, aby nie stracić ostrości podczas przechodzenia do innego okna (inspektora)?



3
nie, rozwiązanie na to pytanie nie jest tutaj odpowiednie
Rogelio Triviño

1
Rozwiązanie jest bardzo odpowiednie
Jonathan

2
Są inne pytania rozwiązane dzięki tej odpowiedzi i to była moja pierwsza próba, ale w tej sytuacji stan: focus jest tracony po przejściu z przeglądarki do okna Chrome Developer Tools, a żądany element do sprawdzenia również znika. Mowa o elementach DOM, które pojawiają się po kliknięciu i znikają po utracie ostrości.
Rogelio Triviño

Odpowiedzi:


144

W przeglądarce Chrome otwórz Narzędzia programistyczne i wybierz kartę Elementy , a następnie otwórz menu kontekstowe węzła nadrzędnego elementu, który chcesz sprawdzić, w menu kontekstowym kliknij Przerwij na > Modyfikacje poddrzewa .

Następnie wystarczy kliknąć stronę, aby przejść do inspektora bez utraty ostrości lub utraty elementu, który chcesz sprawdzić.

wprowadź opis obrazu tutaj


5
Czy w FF też jest sposób?
koleś

2
dzięki, po godzinach zablokowanych dostałem to rozwiązanie i postanowiłem napisać tutaj pytanie i rozwiązanie, z czasem jest to moje główne źródło reputacji tutaj, wiesz, nie mam czasu na pytania typu "jak możesz to zrobić 2 + 2 w javie? ”
Rogelio Triviño

Jak znaleźć węzeł nadrzędny elementu, który chcesz sprawdzić? Mam przycisk, który klikam, aby otworzyć element w inspektorze, ale wyskakujące okienko najwyraźniej nie jest powiązane z DOM.
Michael

tak, czasami javascript tworzy nowe elementy bezpośrednio pod ciałem lub powiązanymi górnymi elementami DOM. Jeśli twój kod nie ma problemu, musisz wiedzieć, gdzie twój javascript tworzy to, jeśli nie, może musisz przerwać modyfikacje poddrzewa BODY i sprawdzić w narzędziach deweloperskich, gdzie dokładnie tworzy nowe elementy dom (nie musi to być bezpośrednie rodzic)
Rogelio Triviño

Dla tych, którzy są zdezorientowani menu kontekstowym, jest to menu z trzema kropkami po lewej stronie węzła dom.
palerdot

92

Możesz uchwycić znikający element, wstrzymując wykonywanie JavaScript za pomocą skrótu klawiaturowego bez poruszania myszą. Oto jak to zrobić w Chrome:

  1. Otwórz Narzędzia programistyczne i przejdź do Źródła.
  2. Zwróć uwagę na skrót do wstrzymania wykonywania skryptu - F8.

    Wstrzymaj wykonywanie skryptu

  3. Wejdź w interakcję z interfejsem użytkownika, aby pojawił się element.

  4. Hit F8.
  5. Jak możesz poruszać myszą, sprawdzać DOM, cokolwiek. Element pozostanie tam.

Ta sztuczka działa również w Firefoksie i innych nowoczesnych przeglądarkach.


12
Jest to świetne do wielu rzeczy - ale niektóre skrypty będą nadal wyzwalane, zanim debugger zostanie zablokowany. Na przykład moje pole wyboru autouzupełniania ukrywa wszystkie opcje przed wstrzymaniem skryptów - co bardzo utrudnia interaktywne dostosowywanie stylów.
Mir

Niestety jest to tylko podpowiedź do chromu, ale rozwiązałem to, dlaczego sam spróbowałem.
webwake

1
@webwake, tak, ten konkretny przykład jest w przeglądarce Chrome, ale większość nowoczesnych przeglądarek umożliwia wstrzymanie wykonywania skryptu za pomocą skrótu klawiaturowego.
mxxk

To działało idealnie i było takie proste! Uwaga: to `` ⌘ + '', aby wstrzymać wykonywanie skryptu w Chrome na Maca.
Jordan Grey

1
Dobrze słyszeć @JordanGray. Czy chodziło Ci o -backslash? Dla mnie to mówi zarówno to, jak i F8praca.
mxxk

73

Jeśli wszystko inne zawiedzie, wpisz to w konsoli:

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

Następnie masz 5 sekund (lub zmień wartość na dowolną inną), aby wyświetlić wszystko, co chcesz debugować.

Żadna z pozostałych odpowiedzi nie działała dla mnie - drzewo DOM było ciągle modyfikowane (tj. Rzeczy, na których mi zależy, znikały) tuż przed zatrzymaniem skryptu.


7
To rozwiązanie jest dość hakerskie, ale faktycznie działa! Dziękuję Ci!
Manjar

1
Najbardziej niezawodne proste rozwiązanie ze wszystkich.
James

13

Nie jestem pewien, czy to zadziała w Twojej sytuacji, ale normalnie (i w każdym przypadku warto o tym wspomnieć, ponieważ jest to świetne narzędzie) w Chrome Developer Tools możesz symulować stany elementów i tak jest :focus.

Aby to zrobić, przejdź do Elementszakładki w Narzędziach dla programistów i upewnij się, że znajdujesz się w Stylessekcji po prawej stronie (powinna to być domyślna lokalizacja po uruchomieniu narzędzi programistycznych). Teraz tuż pod Stylami w prawym górnym rogu masz ikonę Toggle Element State. Po kliknięciu go można symulować :active, :hover, :focusa :visiteddla elementu wybranego na lewej stronie w widoku kodu.

wprowadź opis obrazu tutaj


3
Są inne pytania rozwiązane dzięki tej odpowiedzi i to była moja pierwsza próba, ale w tej sytuacji stan: focus jest tracony po przejściu z przeglądarki do okna Chrome Developer Tools
Rogelio Triviño

9

W przeglądarce Chrome na stronie narzędzi programistycznych dla testowanej strony ... kliknij menu opcji i otwórz ustawienia preferencji ... w Narzędziach dla programistów włącz opcję „Emuluj skoncentrowaną stronę”

Następnie na stronie testowej powoduje pojawienie się elementów. To działało, aby moje wyskakujące wyniki wyszukiwania były skoncentrowane na pozostaniu na ekranie, więc mogłem z nimi pracować.


8

Nie jest to prawdziwe rozwiązanie, ale zwykle działa (:

  1. Skup się na elemencie
  2. Kliknij prawym przyciskiem myszy, aby wyświetlić menu kontekstowe
  3. Przejdź do narzędzi programistycznych

Sprawdzanie danych wejściowych, na które można ustawić fokus


1
nadal działa w przeglądarce Chrome od stycznia 2020 r., dzięki za to! niezłe obejście
manroe

2

Miałem bardzo trudną sytuację i stąd żadna odpowiedź nie działała (nie weryfikowałem odpowiedzi zmieniając pojemnik, który jest dla mnie body, ani oryginalne wydarzenie, bo tego nie wiem). W końcu znalazłem obejście tego problemu, przerywając za pomocą punktów kontrolnych nasłuchiwania zdarzeń kontrolnych w przeglądarce Chrome. Być może jest to również sposób na łamanie przeglądarki w skomplikowanych sytuacjach, w których nawet F8 lub kliknięcie prawym przyciskiem myszy ponownie ukrywa wyskakujące okienko:

wprowadź opis obrazu tutaj


1

Wklej następujący kod Javascript w konsoli programisty przeglądarki:

// 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

Mam szybsze rozwiązanie, ponieważ nie jestem zbyt dobry w używaniu narzędzi. Oto, co robię.

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

-1

Jeśli otworzysz Chrome DevTools, a następnie uruchomisz inspektora elementów za pomocą skrótów klawiaturowych, powinno to rozwiązać problem.

Mac: Cmd+Opt+J a potemCmd+Opt+C

Windows: Ctrl+Shift+J a potemCtrl+Shift+C

[1]

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.