<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style type="text/css"> div { float: left; height: 300px; width: 400px; margin: 0; background-color: orange; } span { display: block; text-align: center; height: 50%; width: 50%; margin: 75px 25% 75px 25%; padding: 10%; box-sizing: border-box; background-color: lightsteelblue; } p { float: left; height: 300px; width: 400px; margin: 0; background-color: chartreuse; } </style> <script src="jquery.js"></script> <script> function notify(e) { var current = e.currentTarget; var target = e.target; var join = Array.prototype.join; // Element.classList is not an Array but just an Object var currentClasses = join.call(current.classList || [], ' '); var targetClasses = join.call(target.classList || [], ' '); console.log(current.tagName, currentClasses, 'from', target.tagName, targetClasses); // Vanilla JS: // e = e || window.event; // Needed for IE, which does not pass the event to handlers. // var target = e.target || e.srcElement; // srcElement for IE, target for every other browser, // // Defeat Safari bug: if an event takes place on an element that contains // // text, this text node, and not the element, becomes the target of the // // event. Therefore we check if the target's nodeType is 3, a text node. // // If it is we move to its parent node, the HTML element. // if (target.nodeType == 3) { // target = target.parentNode; // } // console.log(e, target.tagName, target.classList, target.nodeType); } $(function () { $('body').find('*').click(notify); }); </script> </head> <body> <div class="foo"> Text <span class="bar"> <a href="#">The quick brown fox jumps over the lazy dog.</a> </span> </div> <p>How razorback-jumping frogs can level six piqued gymnasts!</p> </body> </html>