【问题标题】:Create XPath from Element not working in IE 6 7 8从元素创建 XPath 在 IE 6 7 8 中不起作用
【发布时间】:2012-10-07 18:36:13
【问题描述】:

我的函数在IE9下工作,版本9以下,破解;

我用它来获取已知DOM ElementXPath

有人知道替代我的功能吗?

function createXPathFromElement(elm) {
    var allNodes = document.getElementsByTagName('*'); 
    for (segs = []; elm && elm.nodeType == 1; elm = elm.parentNode) 
    {
        if (elm.hasAttribute('id')) { 
            var uniqueIdCount = 0; 
            for (var n=0;n < allNodes.length;n++) { 
                if (allNodes[n].hasAttribute('id') && allNodes[n].id == elm.id) uniqueIdCount++; 
                if (uniqueIdCount > 1) break; 
            }; 
            if ( uniqueIdCount == 1) { 
                segs.unshift('id("' + elm.getAttribute('id') + '")'); 
                return segs.join('/'); 
            } else { 
                segs.unshift(elm.localName.toLowerCase() + '[@id="' + elm.getAttribute('id') + '"]'); 
            } 
        } else if (elm.hasAttribute('class')) { 
            segs.unshift(elm.localName.toLowerCase() + '[@class="' + elm.getAttribute('class') + '"]'); 
        } else { 
            for (i = 1, sib = elm.previousSibling; sib; sib = sib.previousSibling) { 
                if (sib.localName == elm.localName)  i++;
            }; 
            segs.unshift(elm.localName.toLowerCase() + '[' + i + ']'); 
        }; 
    };
    return segs.length ? '/' + segs.join('/') : null; 
}

【问题讨论】:

    标签: javascript dom xpath


    【解决方案1】:

    您可以查看this answer 以获得解决方案。

    至于你的早期 IE 失败的原因:hasAttribute was not introduced until IE8。我不确定为什么要检查整个 DOM 是否有重复的 ID 属性,考虑到拥有多个具有相同 ID 的元素是无效的。但我知道现实世界的 HTML 并不总是有效的。也就是说,您应该能够只使用if (elm.id &amp;&amp; elm.id.length) 来检查是否存在 id 属性。 class 同上。

    如果您希望在 IE 的早期版本中使用该 XPath,您也会遇到问题,因为我认为 HTML 文档不支持它。我相信互联网上有解决方案,所以我会把它留给你(或其他一些善良的人)去发现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多