2010-02-05 2 views
2

Я хочу знать, как сохранить ссылку на объект (это) с помощью jquery. я имею в виду, например, я хочу, чтобы мой пользователь нажал на какой-либо элемент на своей странице, я отправляю ссылку на объект на свой веб-сервер, а в следующий раз, когда пользователь вызывает сервер, я отправляю обратно сохраненное обращение в браузер и делаю другие вещи как fadeIn() ... до сих пор я пытался использовать JSON.stringify (this) и JSON.stringify ($ (this)), но оба они не работают. Я также попытался сохранить идентификатор элемента и класс и тип, поэтому в следующий раз, когда пользователь называет их, я могу просто использовать селектор, но, поскольку я хочу использовать скрипт на любом веб-сайте, все может быть нецелесообразно использовать селекторы. есть ли способ получить точную ссылку на элемент и отправить его на сервер?лучший способ ссылки на элемент с jquery?

ответ

7

Неа, ссылки на элементы DOM работают только в экземпляре один DOM (так что даже если вы загрузите ту же страницу, ссылки больше не будет работать). Вам нужно будет использовать селекторы. Если вы уверены, что структура страницы не меняется, самый простой способ получить тот же элемент заключается в следующем:

// Get numeric index of element on page. 
var index = $('*').index(this); 

// Restore element. 
var $this = $('*').eq(index); 

Вы можете сделать его более защищенным от изменения страницы с помощью идентификаторов и классов, где это возможно.

Посмотрите на этот сценарий: http://paste.blixt.org/297640

Вот упрощенная версия этого, что не зависит от классов/идентификаторов:

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); 
+0

да, это прекрасно ... Я работал над идентификаторами и eq alot, но я забыл, что мы можем установить контекст! хахаа, это именно то, что я хотел, спасибо :) –

1

Хотя я не думаю, что есть способ сделать именно то, что вы просите, я бы предложил разместить идентификатор на элементах, которые вы хотите сохранить таким образом. Затем вы можете сохранить и получить этот идентификатор с сервера с помощью ajax.

Ваш селектор будет выглядеть примерно так:

var saveId = $(this).attr('id'); 

Я не верю, что это будет работать на «любого веб-сайта», как вы указали, но если вы управляете сайтом, вы можете убедиться, что все элементы, которые вы хотите сохранить, имеют идентификатор и при условии, что все идентификаторы на странице должны быть уникальными, вы должны уметь это усмирять - в пределах этого ограничения.

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'));
+0

Этот будет работать только в том случае, если объект jQuery был восстановлен с использованием только селекторов. Например, результат '$ (aDomElement)' не будет иметь действительного свойства '.selector'. – Blixt

Смежные вопросы