Получить уникальный селектор элемента в Jquery - PullRequest
50 голосов
/ 18 апреля 2011

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

Говоря в псевдокоде, я хочу иметь возможность сделать что-то вроде следующего1003 *

Пример HTML (может быть любой сложности):

<html>
<body>
  <div class="example">
    <p>foo</p>
    <span><a href="bar">bar</a></span>
  </div>
</body>
</html>

Пользователь нажимает на что-то, например на ссылку.Теперь мне нужно идентифицировать выбранный элемент и сохранить его местоположение в дереве DOM для дальнейшего использования:

(any element).onclick(function() {
  uniqueSelector = $(this).getUniqueSelector();
})

Теперь uniqueSelector должен выглядеть примерно так (я не против, если это стиль селектора xpath или css):

html > body > div.example > span > a

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

Как это возможно?

Обновление

Получил мой ответ: Получение селектора jQuery для элемента

Ответы [ 12 ]

0 голосов
/ 18 апреля 2011

Вы можете сделать что-то подобное (не проверено)

function GetPathToElement(jElem)
{
   var tmpParent = jElem;
   var result = '';
   while(tmpParent != null)
   {
       var tagName = tmpParent.get().tagName;
       var className = tmpParent.get().className;
       var id = tmpParent.get().id;
       if( id != '') result = '#' + id + result;
       if( className !='') result = '.' + className + result;
       result = '>' + tagName + result;
       tmpParent = tmpParent.parent();
    }
    return result;
}

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

Таким образом, если каждый элемент вашего HTML-документа не имеет идентификатора, этот подход не будет работать.

0 голосов
/ 18 апреля 2011

Вы можете сделать что-то вроде этого:

$(".track").click(function() {
  recordEvent($(this).attr("id"));
});

Он прикрепляет обработчик событий onclick к каждому объекту с классом track. Каждый раз, когда по объекту щелкают, его идентификатор передается в функцию recordEvent(). Вы можете заставить эту функцию записывать время и идентификатор каждого объекта или что угодно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...