2013-04-12 47 views
4

我有一个页面在两个浏览器窗口中打开,并且正在通过套接字传达用户交互。如果有人点击某个元素,我希望它在另一个浏览器中发生。为此,我需要知道与之交互的元素。识别跨浏览器的元素

我有几个选择,但没有一个是100%保证工作。

  • 按元素名称:可以有多个具有相同名称的元素。
  • 由ID:不是所有的元素由类有一个id
  • :不是所有的元素有一个类和类不是唯一
  • 的位置:如果网站是在两个不同的浏览器中打开的位置可以是不同的。

那么,有没有一种其他的方式来确定的100%确凿的元素呢?

+0

您是否具有完全相同的HTML第几页? –

+1

为什么不给所有元素ID?! – hop

+0

如果html文件是相同的(AND没有错误),并且浏览器渲染的文件不是在怪癖模式下,那么元素的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