如何获取X/HTML文件中元素的xpath

Som*_*jee 3 javascript xpath

我是Xpath的初学者,想知道是否有任何方法可以在javascript/jquery中获取元素的xpath.我需要一个绝对的方法来识别一个元素,我知道Xpath用于此,但无法弄清楚如何.

场景是我有一个元素的jquery引用.我想让它的xpath在鼠标点击时存储在数据库中.如果有jquery引用,如何获取HTML元素的Xpath.我需要能够稍后将Xpath转换为绝对元素

function clickTrack(event){
offset=event.pageX;
var xpath=getXpath(this);//I need the xpath here
data={'xpath':xpath,'offset':offset};

}
Run Code Online (Sandbox Code Playgroud)

Jak*_*cil 7

您可以从我曾写过的XPath工具中提取此功能:

http://webkitchen.cz/lab/opera/xpath-tool/xpath-tool.js


编辑:你走了:

function getXPath(node) {
    var comp, comps = [];
    var parent = null;
    var xpath = '';
    var getPos = function(node) {
        var position = 1, curNode;
        if (node.nodeType == Node.ATTRIBUTE_NODE) {
            return null;
        }
        for (curNode = node.previousSibling; curNode; curNode = curNode.previousSibling) {
            if (curNode.nodeName == node.nodeName) {
                ++position;
            }
        }
        return position;
     }

    if (node instanceof Document) {
        return '/';
    }

    for (; node && !(node instanceof Document); node = node.nodeType == Node.ATTRIBUTE_NODE ? node.ownerElement : node.parentNode) {
        comp = comps[comps.length] = {};
        switch (node.nodeType) {
            case Node.TEXT_NODE:
                comp.name = 'text()';
                break;
            case Node.ATTRIBUTE_NODE:
                comp.name = '@' + node.nodeName;
                break;
            case Node.PROCESSING_INSTRUCTION_NODE:
                comp.name = 'processing-instruction()';
                break;
            case Node.COMMENT_NODE:
                comp.name = 'comment()';
                break;
            case Node.ELEMENT_NODE:
                comp.name = node.nodeName;
                break;
        }
        comp.position = getPos(node);
    }

    for (var i = comps.length - 1; i >= 0; i--) {
        comp = comps[i];
        xpath += '/' + comp.name;
        if (comp.position != null) {
            xpath += '[' + comp.position + ']';
        }
    }

    return xpath;

}
Run Code Online (Sandbox Code Playgroud)

如果您希望它也可以在IE中运行,则可能需要进行一些更改.