Wie kann ich ein HTML-Element überprüfen, das bei verlorenem Fokus aus dem DOM verschwindet?

137

Ich versuche, CSS-Eigenschaften von einer Eingabe in eine Tabellenzelle zu überprüfen. Die Eingabe wird beim Klicken angezeigt und verschwindet bei verlorenem Fokus, wie wenn ich versuche, sie zu überprüfen. Wie kann ich es tun, um den Fokus nicht zu verlieren, während ich zu einem anderen Fenster (dem Inspektor) wechsle?

Rogelio Triviño
quelle
3
ist nicht, die Lösung für diese Frage ist hier nicht geeignet
Rogelio Triviño
1
Die Lösung ist sehr gut geeignet
Jonathan
2
Mit dieser Antwort wurden andere Fragen gelöst, und es war mein erster Versuch. In dieser Situation geht jedoch der Fokusstatus verloren, wenn Sie vom Browser zum Fenster "Chrome Developer Tools" wechseln und das gewünschte Element zum Überprüfen ebenfalls verschwindet. Ich spreche von DOM-Elementen, die beim Klicken angezeigt werden und bei verlorenem Fokus verschwinden.
Rogelio Triviño

Antworten:

144

Öffnen Sie im Chrome-Browser die Entwicklertools und wählen Sie die Registerkarte Elemente. Öffnen Sie dann das Kontextmenü des übergeordneten Knotens des Elements, das Sie untersuchen möchten. Klicken Sie im Kontextmenü auf Unterbrechen > Teilbaumänderungen .

Anschließend müssen Sie nur noch auf die Seite klicken, um zum Inspektor zu gelangen, ohne den Fokus oder das zu inspizierende Element zu verlieren.

Geben Sie hier die Bildbeschreibung ein

Rogelio Triviño
quelle
5
Gibt es auch einen Weg in FF?
Alter
2
danke, nachdem die Stunden blockiert waren, bekam ich diese Lösung und beschloss, die Frage und Lösung hier zu schreiben. Im Laufe der Zeit ist dies meine Hauptquelle für den Ruf hier. Ich habe keine Zeit für Fragen wie "Wie kann man 2 + 2 machen?" auf Java? "
Rogelio Triviño
Wie finden Sie den übergeordneten Knoten des Elements, das Sie untersuchen möchten? Ich habe die Schaltfläche, auf die ich klicke, um das Element im Inspektor zu öffnen, aber das Popup hat anscheinend keine Beziehung zum DOM.
Michael
Ja, manchmal erstellt Javascript neue Elemente direkt unter dem Body oder verwandten Top-DOM-Elementen. Wenn Ihr Code kein Problem ist, müssen Sie wissen, wo Ihr Javascript das Ding erstellt. Wenn nicht, müssen Sie möglicherweise Änderungen an BODY-Teilbäumen vornehmen und nach Entwicklungswerkzeugen suchen, bei denen genau neue dom-Elemente erstellt werden (müssen nicht direkt sein Eltern)
Rogelio Triviño
Für diejenigen, die über das Kontextmenü verwirrt sind, ist es das Drei-Punkte-Menü ganz links vom Dom-Knoten.
Palerdot
92

Sie können das verschwindende Element erfassen, wenn Sie die JavaScript-Ausführung mit einer Tastenkombination anhalten, ohne die Maus zu bewegen. So geht's in Chrome:

  1. Öffnen Sie die Entwicklertools und gehen Sie zu Quellen.
  2. Beachten Sie die Verknüpfung zum Anhalten der Skriptausführung F8.

    Unterbrechen Sie die Skriptausführung

  3. Interagieren Sie mit der Benutzeroberfläche, damit das Element angezeigt wird.

  4. Hit F8.
  5. Wie Sie Ihre Maus bewegen können, überprüfen Sie das DOM, was auch immer. Das Element bleibt dort.

Dieser Trick funktioniert auch in Firefox und anderen modernen Browsern.

mxxk
quelle
12
Dies ist für viele Dinge großartig - aber einige Skripte werden immer noch ausgelöst, bevor der Debugger gesperrt wird. Zum Beispiel verbirgt mein Auswahlfeld für die automatische Vervollständigung alle Auswahlmöglichkeiten, bevor Skripte angehalten werden, was es sehr schwierig macht, Stile interaktiv zu optimieren.
Mir
Leider ist dies nur ein Chrom-Hinweis, aber es wurde gelöst, warum ich es selbst ausprobiert habe.
Webwake
1
@webwake, ja, dieses Beispiel ist in Chrome, aber in den meisten modernen Browsern können Sie die Skriptausführung mithilfe einer Tastenkombination anhalten.
mxxk
Das hat perfekt funktioniert und war so einfach! Hinweis: Es ist "⌘ +", um die Skriptausführung unter Chrome für Mac anzuhalten.
Jordan Gray
1
Schön, @JordanGray zu hören. Meinten Sie -backslash? Für mich sagt es sowohl es als auch F8Arbeit.
mxxk
73

Wenn alles andere fehlschlägt, geben Sie dies in die Konsole ein:

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

Dann haben Sie 5 Sekunden Zeit (oder ändern Sie den Wert in einen anderen Wert), damit alles angezeigt wird, was Sie debuggen möchten.

Keine der anderen Antworten funktionierte für mich - der DOM-Baum wurde ständig geändert (dh Dinge, die mir wichtig sind, verschwanden), kurz bevor das Skript angehalten wurde.

Nick Farina
quelle
7
Diese Lösung ist ziemlich hackig, aber sie macht tatsächlich die Arbeit! Danke dir!
Manjar
1
Die zuverlässigste einfache Lösung von allen.
James
13

Sie sind sich nicht sicher, ob dies in Ihrer Situation funktioniert, aber normalerweise (und in jedem Fall erwähnenswert, da es ein großartiges Tool ist) können Sie in Chrome Developer Tools Elementzustände simulieren, und einer ist es auch :focus.

Gehen Sie dazu zur ElementsRegisterkarte in den Entwicklertools und stellen Sie sicher, dass Sie sich im StylesAbschnitt rechts befinden (dies sollte der Standardspeicherort sein, wenn Sie die Entwicklertools starten). Jetzt haben Sie neben den Stilen in der oberen rechten Ecke ein Symbol Toggle Element State. Wenn Sie darauf klicken können Sie simulieren :active, :hover, :focusund :visitedfür das Element ausgewählt Sie auf der linken Seite in der Code - Ansicht.

Geben Sie hier die Bildbeschreibung ein

Dumba F.
quelle
3
Mit dieser Antwort wurden andere Fragen gelöst, und es war mein erster Versuch, aber in dieser Situation geht der
Fokusstatus
9

Klicken Sie in Chrome auf der Seite mit den Entwicklertools für die zu testende Seite auf das Optionsmenü und öffnen Sie die Einstellungen für die Einstellungen. Aktivieren Sie unter DevTools die Option "Emulieren einer fokussierten Seite".

Lassen Sie dann auf der Testseite die Elemente erscheinen. Dies hat dazu beigetragen, dass meine Popup-Suchergebnisse auf dem Bildschirm bleiben, damit ich damit arbeiten kann.

user10864281
quelle
8

Keine echte Lösung, aber es funktioniert normalerweise (:

  1. Fokussiere das Element
  2. Klicken Sie mit der rechten Maustaste für das Kontextmenü
  3. Gehen Sie zu den Entwicklertools

Überprüfen der fokussierbaren Eingabe

Dmitry Vyprichenko
quelle
1
funktioniert ab Januar 2020 noch auf Chrome, danke dafür! schöne
Problemumgehung
2

Ich hatte eine sehr schwierige Situation und von hier aus funktionierte keine Antwort (ich habe die Antworten nicht überprüft, indem ich den Container geändert habe, der der Körper für mich oder das ursprüngliche Ereignis ist, weil ich das nicht weiß). Ich habe endlich eine Problemumgehung gefunden, indem ich über die Kontrollereignis-Listener-Haltepunkte in Chrome Inspector gebrochen habe. Vielleicht ist das auch eine browserübergreifende Methode, um in komplizierten Situationen zu brechen, in denen sogar F8 oder ein Rechtsklick das Popup wieder ausblenden:

Geben Sie hier die Bildbeschreibung ein

jan
quelle
1

Fügen Sie das folgende Javascript in die Browser-Entwicklerkonsole ein:

// 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);
EdC
quelle
0

Ich habe eine schnellere Lösung, da ich nicht sehr gut mit Werkzeugen umgehen kann. Hier ist, was ich tue.

event.originalEvent.preventDefault();
event.originalEvent.stopImmediatePropagation();
event.originalEvent.stopPropagation();
Himanshu Pant
quelle
-1

Wenn Sie Chrome DevTools öffnen und dann den Elementinspektor mithilfe von Tastaturkürzeln auslösen, sollte das Problem behoben sein.

Mac: Cmd+Opt+J und dannCmd+Opt+C

Windows: Ctrl+Shift+J und dannCtrl+Shift+C

[1]

applemonkey496
quelle