Comment puis-je inspecter un élément html qui disparaît du DOM en cas de perte de focus?

137

J'essaie d'inspecter les propriétés CSS à partir d'une entrée dans une cellule de tableau. L'entrée apparaît au clic et disparaît en cas de perte de mise au point, comme lorsque j'essaye de l'inspecter. Comment puis-je faire pour ne pas perdre le focus pendant que je passe à une autre fenêtre (l'inspecteur)?

Rogelio Triviño
la source
3
n'est pas, la solution sur cette question ne convient pas ici
Rogelio Triviño
1
La solution est très appropriée
Jonathan
2
Il y a d'autres questions résolues avec cette réponse, et c'était mon premier essai, mais dans cette situation, l'état: focus est perdu lorsque vous passez du navigateur à la fenêtre des outils de développement Chrome, et l'élément souhaité à vérifier disparaît également. Je parle d'éléments DOM qui apparaissent au clic et disparaissent en cas de perte de focus.
Rogelio Triviño

Réponses:

144

Dans le navigateur Chrome, ouvrez Developer Tools et sélectionnez l' onglet Eléments , puis ouvrez le menu contextuel du nœud parent de l'élément que vous souhaitez inspecter, dans le menu contextuel cliquez sur Break on > Subtree modifications .

Ensuite, il vous suffit de cliquer sur la page et vous accéderez à l'inspecteur sans perdre le focus ni perdre l'élément que vous souhaitez inspecter.

entrez la description de l'image ici

Rogelio Triviño
la source
5
Y a-t-il aussi un moyen de FF?
mec
2
merci, après des heures bloquées, j'ai eu cette solution et j'ai décidé d'écrire la question et la solution ici, au fil du temps, c'est ma principale source de réputation ici, vous savez, je n'ai pas le temps de poser des questions comme "comment pouvez-vous faire 2 + 2 sur java? "
Rogelio Triviño
Comment trouvez-vous le nœud parent de l'élément que vous souhaitez inspecter? J'ai le bouton sur lequel je clique pour ouvrir l'élément dans l'inspecteur, mais le pop-up est apparemment sans rapport dans le DOM.
Michael le
oui, parfois javascript crée de nouveaux éléments directement sous le corps ou les éléments DOM supérieurs associés. Si votre code ne pose aucun problème, vous devez savoir où votre javascript crée la chose, sinon, vous devez peut-être interrompre les modifications de sous-arborescence BODY et vérifier les outils de développement où exactement crée de nouveaux éléments dom (vous n'avez pas besoin d'être le direct parent)
Rogelio Triviño
Pour ceux qui ne connaissent pas le menu contextuel, c'est le menu à trois points à l'extrême gauche du nœud dom.
palerdot le
92

Vous pouvez capturer l'élément qui disparaît si vous suspendez l'exécution de JavaScript avec un raccourci clavier sans déplacer la souris. Voici comment procéder dans Chrome:

  1. Ouvrez les outils de développement et accédez aux sources.
  2. Notez le raccourci pour suspendre l'exécution du script— F8.

    Suspendre l'exécution du script

  3. Interagissez avec l'interface utilisateur pour faire apparaître l'élément.

  4. Hit F8.
  5. Comment vous pouvez déplacer votre souris, inspecter le DOM, peu importe. L'élément y restera.

Cette astuce fonctionne également dans Firefox et d'autres navigateurs modernes.

mxxk
la source
12
C'est génial pour beaucoup de choses - mais certains scripts se déclenchent toujours avant que le débogueur ne soit verrouillé. Par exemple, ma boîte de sélection de saisie semi-automatique masque tous les choix avant la mise en pause des scripts, ce qui rend très difficile la modification des styles de manière interactive.
Mir
Malheureusement, ce n'est qu'un indice de chrome, mais je l'ai résolu pourquoi je l'ai essayé moi-même.
webwake
1
@webwake, oui, cet exemple particulier est dans Chrome, mais la plupart des navigateurs modernes vous permettront de suspendre l'exécution du script à l'aide d'un raccourci clavier.
mxxk
Cela fonctionnait parfaitement et était si facile! Remarque: c'est «⌘ +» pour suspendre l'exécution du script sur Chrome pour Mac.
Jordan Grey
1
C'est bon d'entendre @JordanGray. Vouliez-vous dire -backslash? Pour moi, cela dit à la fois le F8travail et le travail.
mxxk
73

Si tout le reste échoue, saisissez ceci dans la console:

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

Ensuite, vous avez 5 secondes (ou changez la valeur en autre chose) pour faire apparaître ce que vous voulez déboguer.

Aucune des autres réponses n'a fonctionné pour moi - l'arborescence DOM continuait à être modifiée (c'est-à-dire que les choses qui m'intéressaient ont disparu) juste avant la pause du script.

Nick Farina
la source
7
Cette solution est assez piratée, mais elle fait vraiment le travail! Je vous remercie!
Manjar
1
La solution simple la plus fiable de toutes.
James le
13

Je ne sais pas si cela fonctionne dans votre situation, mais normalement (et dans tous les cas, il convient de le mentionner à cet égard car c'est un excellent outil) dans les outils de développement Chrome, vous pouvez simuler les états des éléments et l'un d'eux l'est également :focus.

Pour ce faire, accédez à l' Elementsonglet dans les outils de développement et assurez-vous que vous êtes dans la Stylessection de droite (cela devrait être l'emplacement par défaut lorsque vous démarrez les outils de développement). Maintenant, juste sous les styles dans le coin supérieur droit, vous avez une icône Toggle Element State. Lorsque vous cliquez dessus , vous pouvez simuler :active, :hover, :focuset :visitedpour l'élément que vous avez sélectionné sur la gauche dans votre code de vue.

entrez la description de l'image ici

Dumba F.
la source
3
Il y a d'autres questions résolues avec cette réponse, et c'était mon premier essai, mais dans cette situation, l'état: focus est perdu lorsque vous passez du navigateur à la fenêtre des outils de développement Chrome
Rogelio Triviño
9

Dans Chrome, sur la page des outils de développement de la page à tester ... cliquez sur le menu des options et ouvrez les paramètres des préférences ... sous DevTools, activez `` Émuler une page ciblée ''

Ensuite, dans la page de test, faites apparaître les éléments. Cela a fonctionné pour que mes résultats de recherche contextuels restent concentrés à l'écran afin que je puisse travailler avec.

user10864281
la source
8

Ce n'est pas une vraie solution, mais cela fonctionne généralement (:

  1. Focalisez l'élément
  2. Clic droit pour le menu contextuel
  3. Passer aux outils de développement

Inspection de l'entrée focalisable

Dmitry Vyprichenko
la source
1
fonctionne toujours sur Chrome à partir de janvier 2020, merci pour cela! belle solution de contournement
manroe
2

J'ai eu une situation très difficile et aucune réponse ne fonctionnait à partir d'ici (je n'ai pas vérifié les réponses en changeant le conteneur, qui est le corps pour moi, ou l'événement d'origine, car je ne le sais pas). J'ai finalement trouvé une solution de contournement en passant par les points d'arrêt de l'écouteur d'événements de contrôle dans Chrome Inspector. C'est peut-être aussi une façon de casser avec plusieurs navigateurs pour des situations compliquées où même F8 ou un clic droit de la souris masquent à nouveau la fenêtre contextuelle:

entrez la description de l'image ici

Jan
la source
1

Collez le Javascript suivant dans la console développeur du navigateur:

// 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
la source
0

J'ai une solution plus rapide car je ne suis pas très doué pour l'utilisation des outils, voici ce que je fais.

event.originalEvent.preventDefault();
event.originalEvent.stopImmediatePropagation();
event.originalEvent.stopPropagation();
Pantalon Himanshu
la source
-1

Si vous ouvrez Chrome DevTools, puis déclenchez l'inspecteur d'éléments à l'aide de raccourcis clavier, cela devrait résoudre le problème.

Mac: Cmd+Opt+J puisCmd+Opt+C

Windows: Ctrl+Shift+J puisCtrl+Shift+C

[1]

applemonkey496
la source