2013-04-12 45 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