2013-04-12 2 views
4

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

У меня есть несколько вариантов, но ни один из них не гарантируется на 100%.

  • по названию объекта: может быть несколько элементов с тем же именем.
  • по идентификатору: не все элементы имеют идентификатор
  • по классам: не все элементы имеют класс и классы не являются уникальными
  • по местоположению: если сайт открыт в двух разных браузерах расположение может отличаться ,

Так есть ли другой способ идентифицировать элементы, которые являются на 100% убедительными?

+0

У вас есть тот же самый HTML-код в bo го страниц? –

+1

Почему бы не дать ID всем элементам?! – hop

+0

Если файл html тот же (И без ошибок), и браузер передает файлы не в режиме quirks, xpath элементов должен быть таким же. – Eineki

ответ

4

Если у вас есть тот же HTML-код на обеих страницах, вы можете просто использовать «путь», построенный с индексом в родительском объекте до document.body. Его легко построить и легко использовать для поиска элемента.

Вот функции для вычисления этого пути или следовать его:

function indexInParent(node) { 
    var children = node.parentNode.childNodes; 
    for (var i=0; i<children.length; i++) { 
     if (children[i]==node) return i; 
    } 
    return -1; 
} 

function nodePath(e) { 
    var path = []; 
    while (e!=document.body) { 
     path.push(indexInParent(e)); 
     e = e.parentNode; 
    } 
    return path.reverse().join('-'); 
} 

function getNode(path) { 
    path = path.split('-'); 
    var e = document.body; 
    while(path.length && e) e=e.childNodes[parseInt(path.shift())]; 
    return e; 
} 

Demonstration: нажмите «Запуск с JS», а затем

  • нажмите на элемент, чтобы увидеть путь в консоли
  • введите путь к элементу в консоли
+0

Как вы это делаете? –

+1

@Chris B здесь есть связанный с этим вопрос: http://stackoverflow.com/questions/5728558/jquery-get-the-dom-path-of-the-clicked-a Если вы ищете «найти элемент по пути», вы найти много примеров. – Pickels

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