获取唯一选择的jQuery(Get unique selector jQuery)

2019-07-21 09:49发布

我需要能够得到一个unqiue选择了页面上的每个元素。

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

$(document).click(function(){
    var sel = getUniqueSel(this);
});

因此,存储后sel在DB值我可以得到价值,简单地通过访问元素

var el = $(sel);

我无法改变,不知道有关页面的HTML结构任何东西,我不能简单地添加唯一的ID(使用JS)的每个元素,因为这将是低效的。

Answer 1:

另一种方法可能是徘徊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");
    }
});


Answer 2:

要做到这一点的方法之一是让所有你能得到被点击的元素有关的信息。 所以,当你把它保存到数据库中,你可以将其保存,例如文本:如果您点击的元素是: <div> I'm a div </div>

$(document).click(function(){
    var tagName = $(this).prev().prop('tagName');
    var attributes = {}; 
    if( this.length ) {
        $.each( this[0].attributes, function( index, attr ) {
            attributes[ attr.name ] = attr.value;
        } ); 
    }
    var elText=$(this).html();
    saveToDB(tagName,attributes,elText);
});

您可以使用属性,你有或者干脆使用后发现该元素

$(tagName+'['+attribute+'="'+value+'"]:contains("'+elText+'")')

我认为这应该帮助



文章来源: Get unique selector jQuery