2014-04-30 84 views
1

重要 我並非試圖欺騙/釣魚或以任何方式傷害任何人。我正在爲網站創建一個放大鏡,就像在一張紙上使用放大鏡一樣。在javascript中匹配相同的元素

問題

我會設置方案。

我已經基本上覆制整個網頁的HTML,從此奠定了在重複原來的頁面。像這樣:

Position example

當我點擊複製的HTML元素,我想在原來的頁面傳遞click事件。

這就是我是如何接近問題:

duplicate_element.onmousedown = function(event) { 
     var range = document.createRange(); 
     var test = range.setStart(event.target, 0); 
     // Then I hoped to use: 
     range.startContainer 

     // to search for the clicked element on the original content 
     document.find(range.startContainer) 
} 

所以我難倒如何找到從點擊目標匹配的元素在原始的HTML。

有一些規則拼圖:

  • 我不能使用圖書館
  • 但是,我有機會獲得jQuery的嘶嘶聲
  • 指針活動 - 我希望能夠到與重複的HTML進行交互,但實際上會影響原始HTML。我認爲指針事件使得複製的版本不可觸及

任何幫助將是偉大的。我會回答你需要的任何問題。謝謝:)

+4

這聽起來很網上誘騙。 – DanMan

+0

更新我的問題,以減輕任何擔心安全 – outrunthewolf

+0

因爲你說這不是一個騙局顯然意味着它不是,哈哈!無論如何。最好的事情可能是在複製元素上存儲對原始元素的引用。但請注意,當你遇到一個javascript重的網站時,你可能會遇到重大問題。 –

回答

1

根據重複的HTML是如何覆蓋在原來的一個,你可以從複製文檔的根計算的路徑,並重新它適用於重複的文件,然後觸發事件。

但是,你需要一種方法來計算的路徑,從計算的路徑適用。例如,如果文檔中類似的方式結構:

<body> 
    <div> <!-- root of the orginal HTML --> 
    ... 
    </div> 

    <div> <!-- duplicated root --> 
    ... 
    </div> 
</body> 

然後你就可以計算從複製divXPath(或一些其他類型的路徑,如外露的this question兒童的索引列表) ,並從原來的div重新申請它:

duplicated_element.onmousedown = function(event) { 
    var path = getPath(duplicatedDiv, event.target); 
    var element = findNode(originalDiv, path); 
    element.onmousedown(event); 
} 

當然它只能如果原來的HTML有身體內的根。如果沒有,你可以在這樣一個根封裝複製HTML和計算從根本路徑,並從文檔的根應用它來查找匹配的節點:

duplicated_element.onmousedown = function(event) { 
    var path = getPath(duplicateRoot, event.target); 
    var element = findNode(document, path); 
    element.onmousedown(event); 
} 

它不會給你一個完整的答案,可能需要根據您生成頁面的方式進行調整,但希望能爲如何繼續提供有用的幫助。

+0

非常感謝。因爲人們似乎認爲它存在安全風險,所以我不會發布我的最終解決方案。但是,你把我放在了正確的軌道上,並且稍微調整了一下它就完美了。非常感謝!! – outrunthewolf