2013-05-20 2 views
0

Я много ищу для этого сайта и у меня было много хороших ответов, это первый раз, когда мне нужно задать вопрос, потому что я просто не могу найти ответ.Хранить и отзывать селектор [jquery]

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

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

Я не могу понять, как сохранить этот элемент (или, точнее, его селектор), чтобы я мог получить данные при следующем переходе на страницу, не требуя двойного щелчка.

Вот jsFiddle http://jsfiddle.net/troywray/YvSH9/, и если вы дважды щелкните красный текст, текст, который я хочу, легко получить. Но что я могу сохранить, чтобы позже воспроизвести селектор?

$('body').bind("dblclick", function(event){ 
    var dblClickElement = $(event.target); 
    var specialText = dblClickElement.html(); 
    alert("I picked up: " + specialText); 
    console.log(dblClickElement); 
    console.log("selector result:", $(dblClickElement).selector); // empty string 
}); 

Console говорит, что dblClickElement является объектом [span.abcde], но это интерактивный объект в поджигатель. То, что я хочу, это строка «span.abcde», поэтому я мог бы использовать ее для выбора в будущем. Кажется, что свойство jquery не имеет свойства объекта jQuery, равного span.abcde

Я думал, что нашел здесь что-то актуальное: Get the current jQuery selector string?, но он здесь не работает (доказательство находится в скрипке, и я понимаю, почему).

Мне не нужны предложения для разбора внутреннего/внешнего html, чтобы построить селекторную строку - если я должен это сделать, то, без сомнения, я могу понять это.

Кроме того, я понимаю, что во многих случаях селектор не может дать мне единственный уникальный элемент, но я могу справиться с этим.

+3

Проблема заключается в том, что на одном узле может быть много селекторов. Вы не можете преобразовать узел в селектор, не пересекая дерево DOM и создавая селектор, который вам нравится. – Dogbert

+0

Вы в порядке с DOM-traversal для создания селектора вручную или хотите избежать * all * traversale/HTML-манипуляции? –

+0

@ Dogbert - спасибо - хорошая точка.Полагаю, я думаю, что в jsFiddle я * не сказал jQuery использовать span.abcde, но что-то решило, что это селектор, и tag.class будет хорошим селектором в этом случае. Я не должен был говорить, что у меня должен быть span.abcde. Мне просто нужен селектор, который вернет один или несколько элементов, в том числе тот, который я действительно хочу (я предполагаю, что могу получить массив элементов и определить, какой именно индекс я хочу, например $ ('span') [4] –

ответ

0

Почему бы не установить cookie? Есть плагин jquery для этого http://www.electrictoolbox.com/jquery-cookies/, если вы cna только извлекаете текст после загрузки страницы, или если текст доступен на сервере, установите сервер в файл cookie?

+0

нет, перекрестные цели я думаю. Я могу отправить селектор обратно на сервер, чтобы не было проблем (я тоже мог бы использовать файлы cookie). Проблема заключается не в хранении/извлечении селектора, а в том, что он помещает селектор в форму, которую я могу использовать, когда я буду в будущем загружать ту же страницу, что я могу сделать (в принципе) x = $ (myStoredSelector) .html() –

0

Ответ должен был использовать верхнюю проголосовавшую функцию getPath из ссылки, обозначенной @Stephan. Обратите внимание, что есть ссылка на другую функцию getPath, которая не работает с неоднозначными узлами.

getPath дает строку, которая может быть сохранена для дальнейшего использования, например.

HTML> Тело> DIV> р: эк (2)> span.abcde

Для нахождения элемента в будущем из сохраненного пути я использовал (не оптимизированный):

var bits = path.split(">"); 
var currentElement = null; 
for (var k = 0; k < bits.length; k += 1) { 
    if (k === 0) { 
     currentElement = $(bits[k]); 
    } else { 
     currentElement = currentElement.children(bits[k]); 
    } 
} 
var desiredText = currentElement.html(); 

Как остроконечный out by @fnostro, это зависит от структуры DOM, которая остается постоянной между приложениями, но для моего приложения это не проблема.

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