2012-03-01 3 views
9

Я хочу отслеживать ВСЕ элементы, которые нажаты на HTML-страницу. Мне нужен хороший способ ссылки, на который был щелкнут элемент (так что я смогу повторить клики на одинаковой отдельной HTML-странице позже).Отслеживать ВСЕ элементы с помощью JavaScript

Есть ли способ ссылки на элемент, который был нажат?

Я могу добавить уникальные идентификаторы и имена классов для каждого элемента на странице. Но я считаю, что должен быть еще один путь?

HTML-страница, в которой я буду воспроизводить клики, будет идентичной.

Что-то облегченное этом (но более точной информация Wich элемента это было, может быть, можно собрать) ...

кода для отслеживания Wich элемента, который был щелкнул

var arrayWithElements = new Array(); 

document.onclick = clickListener; 

function clickListener(e) { 
    var clickedElement; 
    if(e == null) { 
     clickedElement = event.srcElement; 
    } else { 
     clickedElement = e.target; 
    } 
    arrayWithElements.push(clickedElement) 
    alert(arrayWithElements); 
} 

кодекса, будет использоваться на одинаковой HTML-странице

document.someHowGetTheElement().onclick(); 
+2

Добавление идентификаторов к каждому элементу вероятно, самый простой способ. Вы можете добавить их также с помощью JavaScript. –

+0

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

+0

@James: 'this' будет ссылаться на' document', а не на элемент clicked. @ Dr.Molle: Он упоминает о «повторении» событий на другой странице. Вы не можете упорствовать или передавать ссылки на узлы DOM. –

ответ

14

Я думаю, вы ищете что-то вроде этого:


var arrayWithElements = new Array(); 

function clickListener(e) 
{ 
    var clickedElement=(window.event) 
         ? window.event.srcElement 
         : e.target, 
     tags=document.getElementsByTagName(clickedElement.tagName); 

    for(var i=0;i<tags.length;++i) 
    { 
     if(tags[i]==clickedElement) 
     { 
     arrayWithElements.push({tag:clickedElement.tagName,index:i}); 
     console.log(arrayWithElements); 
     }  
    } 
} 

document.onclick = clickListener; 

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

document.getElementsByTagName(item.tag)[item.index] 

(где пункт является пункт arrayWithElements)

Демо: http://jsfiddle.net/doktormolle/z2wds/

+0

Впечатлены! Я думаю, это именно то, что я искал! Большое вам спасибо :) – user1087110

+1

+1 Хорошая идея. Возможно, стоит кэшировать результаты 'getElementsByTagName'. –

+0

Да, да, я применил предложение –

1

Вы можете использовать this related question. Другими словами, хороший способ узнать, какой элемент был нажат без добавления идентификаторов повсюду, заключается в использовании метода jQuery .cssSelectorAsString(). Например:

function clickListener(e) { 
    var clickedElement; 
    if(e == null) { 
     clickedElement = event.srcElement; 
    } else { 
     clickedElement = e.target; 
    } 
    arrayWithElements.push($(clickedElement).cssSelectorAsString()); // <==== 
    alert(arrayWithElements); 
}  

Смотрите также: Get unique selector of element in Jquery

+0

Я не использую jquery (забыл упомянуть). Но я рассмотрю менталитет xPath! Благодаря! – user1087110

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