我想知道如何使用jquery保存对象(this)的引用。我的意思是,例如我想当我的用户点击他页面中的任何元素时,我将对象的引用发送到我的网络服务器,下次用户调用服务器时,我将保存的参考发送回浏览器,并做其他的事情就像fadeIn()...到目前为止我已经尝试过使用JSON.stringify(this)和JSON.stringify($(this)),但两者似乎都没有用。我也试过保存elemen't ID和类和类型,所以下次用户调用它我可以只使用选择器,但由于我想在任何网站上使用该脚本,事情可能不是理想的选择器。是否有任何方法可以准确引用元素并将其发送到服务器?
答案 0 :(得分:8)
不,对DOM元素的引用只能在一个DOM实例中工作(所以即使你重新加载同一个页面,引用也不再起作用)。您将不得不使用选择器。如果您确定页面结构没有改变,获取相同元素的最简单方法是:
// Get numeric index of element on page.
var index = $('*').index(this);
// Restore element.
var $this = $('*').eq(index);
您可以尽可能使用ID和类来更改页面。
看一下这个脚本:http://paste.blixt.org/297640
这是一个更简单的版本,它不依赖于类/ ID:
jQuery.fn.getPath = function () {
if (this.length != 1) throw 'Requires one element.';
var path, node = this;
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;
};
像这样使用:
// Get selector for element.
var path = $(this).getPath();
// Get element using selector.
var $this = $(path);
答案 1 :(得分:1)
虽然我认为没有办法完全按照你的要求行事,但我建议你以这种方式在要保存的元素上放置一个ID。然后,您可以使用ajax保存并稍后从服务器检索该ID。
你的选择器看起来像这样:
var saveId = $(this).attr('id');
我不相信这会在你所指示的“任何网站”上有效,但是如果你控制网站,你可以确保你想要保存的所有元素都有一个ID,并且所有ID都在一个页面必须是唯一的,你应该能够在这个范围内完成这个。
答案 2 :(得分:1)
您可以保存selector
字段,以便以后用它来选择它。像这样:
var Elements = $('body').find('.container').find('div.controls'); // Just some complex selection
...
var ToSave = Elements.selector;
AJAXSave('Elements', ToSave);
// ToSave will be 'body .container div.controls' which is the elements we are talking about.
...
var LastElements = $(AJAXLoad('Elements'));