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),因为这样效率很低.
另一种方法可能是漫游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)