1. 程式人生 > >【學習】如何用jQuery獲取iframe中的元素

【學習】如何用jQuery獲取iframe中的元素

說實在的,以前真的很少用到iframe,可最近公司把主要精力放在了研發後臺系統上,所以iframe的出場就高了。今天寫一個小知識,如何獲取iframe中的元素。js原生方法我就不寫了,畢竟還是對jquery情有獨鍾,用到的是contents()方法,請看官方解釋:http://www.w3school.com.cn/jquery/traversing_contents.asp


所以說,用contents()是一定能獲取到iframe中的元素的,但是必須在同一個域,這裡就引出“跨域”的問題,以下是百度出來的知識點:

什麼是跨域,簡單地理解就是因為JavaScript同源策略的限制,a.com 域名下的js無法操作b.com或是c.a.com域名下的物件。


所以呢,我們在主頁面去訪問iframe中的元素,給其加一個js事件,是不起作用的。寫一個最最簡單的alert彈出,在頁面中,有一個iframe,其src為a.html,在a.html中有一個按鈕,class起名btn。在主頁面中寫上如下js程式碼:

$(function(){

var btn=$(this).contents().find(".btn");

btn.click(function(){

alert(1);

});

});

這時點選這個按鈕,是沒有任何反應的(例項請點選檢視)。

所以,要修改,給iframe加一個load()即可:

$(function(){

$(".my-iframe").load(function(){

var btn=$(this).contents().find(".btn");

btn.click(function(){

alert(1);

});

});

});

還有一點要注意,如果iframe中沒有引入jquery庫檔案,那麼在主頁面中引入的庫檔案,一定在放在iframe之前,放其之後是不起作用的。而如果iframe中也引入了jquery庫檔案,則主頁面中的庫檔案放在任何位置都可以了。

好了,今天只寫這一個小問題吧,關於iframe還有很多麻煩的事情,改天再總結一下其他的。