我需要能够为页面上的每个元素获取一个 unqiue 选择器。
例如,当我单击一个元素时,我想做这样的事情:
$(document).click(function(){
var sel = getUniqueSel(this);
});
因此,将sel
值存储在数据库中后,我可以获取该值并简单地通过以下方式访问元素
var el = $(sel);
我无法更改并且对页面的 HTML 结构一无所知,也不能简单地为每个元素添加唯一 ID(使用 JS),因为这样效率低下。
我需要能够为页面上的每个元素获取一个 unqiue 选择器。
例如,当我单击一个元素时,我想做这样的事情:
$(document).click(function(){
var sel = getUniqueSel(this);
});
因此,将sel
值存储在数据库中后,我可以获取该值并简单地通过以下方式访问元素
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");
}
});
一种方法是获取您可以获取的有关被单击元素的所有信息。因此,当您将其保存到数据库时,您可以将其保存为文本,例如:如果您单击的元素是:<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+'")')
我认为这应该有帮助