Get CSS path from Dom element

前端 未结 6 1533
慢半拍i
慢半拍i 2020-11-27 16:08

I got this function to get a cssPath :

var cssPath = function (el) {
  var path = [];

  while (
    (el.nodeName.toLowerCase() != \'html\') && 
    (el = el         


        
6条回答
  •  清酒与你
    2020-11-27 16:18

    function cssPath (e, anchor) {
        var selector;
    
        var parent = e.parentNode, child = e;
        var tagSelector = e.nodeName.toLowerCase();
    
        while (anchor && parent != anchor || !anchor && parent.nodeType === NodeTypes.ELEMENT_NODE) {
            var cssAttributes = ['id', 'name', 'class', 'type', 'alt', 'title', 'value'];
            var childSelector = tagSelector;
            if (!selector || parent.querySelectorAll (selector).length > 1) {
                for (var i = 0; i < cssAttributes.length; i++) {
                    var attr = cssAttributes[i];
                    var value = child.getAttribute(attr);
                    if (value) {
                        if (attr === 'id') {
                            childSelector = '#' + value;
                        } else if (attr === 'class') {
                            childSelector = childSelector + '.' + value.replace(/\s/g, ".").replace(/\.\./g, ".");
                        } else { 
                            childSelector = childSelector + '[' + attr + '="' + value + '"]';
                        }
                    }
                }
    
                var putativeSelector = selector? childSelector + ' ' + selector: childSelector;             
    
                if (parent.querySelectorAll (putativeSelector).length > 1) {
                    var siblings = parent.querySelectorAll (':scope > ' + tagSelector);
                    for (var index = 0; index < siblings.length; index++)
                        if (siblings [index] === child) {
                            childSelector = childSelector + ':nth-of-type(' + (index + 1) + ')';
                            putativeSelector = selector? childSelector + ' ' + selector: childSelector;             
                            break;
                        }
                }
    
                selector = putativeSelector;
            }
            child = parent;
            parent = parent.parentNode;
        }
    
        return selector;
    };      
    

提交回复
热议问题