获得独特的选择器jQuery

Cri*_*sty 5 javascript jquery jquery-selectors

我需要能够为页面上的每个元素获取一个unqiue选择器.

例如,当我点击一个元素时,我想做这样的事情:

$(document).click(function(){
    var sel = getUniqueSel(this);
});
Run Code Online (Sandbox Code Playgroud)

因此,在将sel值存储在DB中之后,我可以获取该值并只需访问该元素

var el = $(sel);

我不能改变,也不知道页面的HTML结构,我不能简单地为每个元素添加唯一的ID(使用JS),因为这样效率很低.

Mor*_*ler 6

另一种方法可能是漫游dom树并创建一个元素的路径,你可以保存它,然后再将它作为一个选择器使用它,虽然这可能不是防弹的,但也许它可以开始.

编辑:在评论中更新了您的建议答案,现在它返回ID(如果可用)

只需访问JSBin上的示例并单击document两次. 但请注意突出显示的内容..

jQuery.fn.getPath = function () {
    if (this.length != 1) throw 'Requires one element.';
    var path, node = this;
    if (node[0].id) return "#" + node[0].id;
    while (node.length) {
        var realNode = node[0],
            name = realNode.localName;
        if (!name) break;
        name = name.toLowerCase();
        var parent = node.parent();
        var siblings = parent.children(name);
        if (siblings.length > 1) {
            name += ':eq(' + siblings.index(realNode) + ')';
        }
        path = name + (path ? '>' + path : '');
        node = parent;
    }
    return path;
};
var sel;
$(document)
    .click(function (e, a) {
    if (!sel) {
        sel = $("#comment-21702402")
            .getPath();
        alert("Path is: " + sel + ", hiding the Element -> Click again to highlight");
    } else {
        $(sel)
            .css("background-color", "yellow");
    }
});
Run Code Online (Sandbox Code Playgroud)