-
-
Save ErosLever/51c794dc1f2bab888f571e47275c85cd to your computer and use it in GitHub Desktop.
| // you can include this from: https://cdn.rawgit.com/ErosLever/51c794dc1f2bab888f571e47275c85cd/raw/get-css-selector.js | |
| /** | |
| * Handy function to get the full CSS selector of any element in a web page | |
| * @param {Element} e - the Element whose selector will be returned | |
| * @returns {string} s - the complete CSS Selector including all ancestors elements | |
| */ | |
| function getFullSelector(e){ | |
| var s = "", t, i, c, p, n; | |
| do{ | |
| t = e.tagName.toLowerCase(); | |
| i = e.hasAttribute("id") ? "#" + e.id : ""; | |
| c = e.hasAttribute("class") ? "." + e.className.split(/\s+/).join(".") : ""; | |
| p = e.parentNode; | |
| n = Array.prototype.filter.call(e.parentNode.childNodes,function(x){ | |
| return x.nodeType == Node.ELEMENT_NODE; | |
| }).indexOf(e) + 1; | |
| s = t + i + c + ":nth-child(" + n + ") > " + s; | |
| }while( !p || !(e = p).tagName.match(/^HTML$/i) ); | |
| return s.slice(0,-3); | |
| } | |
| /** | |
| * Handy function to get the minimal CSS selector of any element in a web page | |
| * @param {Element} e - the Element whose selector will be returned | |
| * @returns {string} s - the minimal CSS Selector including its ancestors elements | |
| */ | |
| function getMinSelector(e){ | |
| var s = "", t, i, c, p, n; | |
| do{ | |
| t = e.tagName.toLowerCase(); | |
| i = e.hasAttribute("id") ? "#" + e.id : ""; | |
| c = e.hasAttribute("class") ? "." + e.className.trim().split(/\s+/).map(x=>x.replace(/([^\w\-\_])/g,'\\$1')).join(".") : ""; | |
| p = e.parentNode; | |
| n = Array.prototype.filter.call(e.parentNode.childNodes,function(x){ | |
| return x.nodeType == Node.ELEMENT_NODE; | |
| }).indexOf(e) + 1; | |
| n = ":nth-child(" + n + ")"; | |
| if(i && p.querySelectorAll(i).length == 1) | |
| s = i + " > " + s; | |
| else if(p.querySelectorAll(t).length == 1) | |
| s = t + " > " + s; | |
| else if(c && p.querySelectorAll(t+c).length == 1) | |
| s = t + c + " > " + s; | |
| else if(i && c && p.querySelectorAll(t+i+c).length == 1) | |
| s = t + i + c + " > " + s; | |
| else | |
| s = t + i + c + n + " > " + s; | |
| }while( !p || !(e = p).tagName.match(/^HTML$/i) ); | |
| // try to remove parent selectors | |
| cs = s.slice(0,-(" > ".length)).split(" > "); | |
| s = cs.pop(); | |
| while( document.querySelectorAll(s).length > 1 ){ | |
| s = cs.pop() + " > " + s; | |
| } | |
| return s; | |
| } | |
| document.addEventListener('click', function(e) { | |
| e = e || window.event; | |
| var target = e.target || e.srcElement; | |
| console.log( getFullSelector( target ) ); | |
| console.log( getMinSelector( target ) ); | |
| }, false); |
I gave it a quick look and found an issue here: e.className.split(/\s+/) when the className contains extra spaces (e.g., at the end). I fixed this adding .trim() to get rid of extra spaces.
Give it a try with the updated code. Keep in mind this is old code I wrote back in 2016, thus not really maintained.
Double checked your error, you have invalid CSS characters in your class names: bg-[#5ee5de] should not be a valid CSS class name. Although some browsers still accept it. document.querySelector requires these special character to be escaped (with a \\).
I added .replace(/([^\w\-\_])/g,'\\$1') to escape any non-alphanumeric, hyphen or underscore char.
@ErosLever Oh, sorry. Github didn't add such a timestamp (except I explicitly visit "Revisions" tab), I didn't notice that.
bg-[#5ee5de] that thing comes from tailwindcss.
Thank you for that though.
Or just use finder lib: https://github.com/antonmedv/finder/tree/master
Hello, friend, getMinSelector seems doesn't work for me.