2014-01-10 97 views
-1

假設當前頁面是some1.html,並且有第二個頁面some2.html。如何使用JavaScript從some1.html訪問「some2.html」中的DOM元素?如何從當前html中訪問其他html的dom元素

+3

你打開它通過'window.open'什麼的? – putvande

+0

總之,你沒有。 AFAIK每一個現代瀏覽器都會將它作爲XSS進行分類,並阻止在另一個窗口上操作DOM元素的任何嘗試。但是,如果窗口是用'window.open'打開的,並且在同一個域上,可能會被允許。 –

+0

如果你現在查看我的答案,你會發現一個額外的部分,我進一步解釋如何做到這一點。 – Joeytje50

回答

1

你不能。

您的代碼顯示新頁面正在加載在同一個窗口中。

頁面1的JavaScript環境在頁面2的環境創建之前將消失。由於它們不同時存在,因此不能從另一個DOM中訪問它們。

你可以做的是將一些數據存儲在localstorage或cookie中,並讓你放置在page2中的代碼查找這些數據並根據它說的運行JS。

-2

你可以試試Ajaxh,因爲正如Quentin所說,改變window.location.href會加載chaned文件。或使用iframe這樣的:

var frame= document.createElement('iframe'); 
frame.setAttribute('src', 'some2.html'); 
frame.setAttribute('name', 'some2'); 
frame.appendTo(body); 
var some2 = document.frames['name']; 
//now you can acces to some2 with getElementById,... 
2

你能做到這一點的方法是使用AJAX:

$.get(url, function(data) { 
    var $doc = $(data); 
}); 

你可以用它來從URL獲取內容,並用它做什麼。

作爲對您編輯的迴應:您可以通過執行$doc.find('selector')而不是通常的jQuery $('selector')來訪問DOM元素。

您也可以使它更容易一點做:

在這種情況下
$.get(url, function(data) { 
    var $doc = $(data); 
    var $d = $doc.find; 
}); 

你可以使用語法$d('selector')


你會做到這一點沒有jQuery的方式安裝的是:

var xhr = new XMLHttpRequest(); 
xhr.open('GET', url, true); 
xhr.responseType = 'document'; 
xhr.send(); 
xhr.onload = function(e) { 
    var doc = e.target.responseXML; 
} 

,然後你可以通過doc.getElementById('id')訪問DOM元素,就像你通常選擇元素,但使用doc,而不是document

注:這些功能,$doc$ddoc變量只在回調函數中訪問的(所以他們只有他們定義成函數內訪問)。

+0

您的非jQuery示例不是瀏覽器不可知的。 –

+0

哦,我不知道。那麼什麼部分不起作用呢? – Joeytje50

+0

我相信IE <= 6,'XMLHttpRequest'沒有定義(我知道,IE的兼容性很痛苦)。這不是一個大問題。我贊成你的回答,但認爲這值得一提。 –