Làm thế nào để truy cập trang mẹ iFrame bằng jquery?


267

Tôi có iframe và để truy cập phần tử cha, tôi đã triển khai mã sau:

window.parent.document.getElementById('parentPrice').innerHTML

Làm thế nào để có được kết quả tương tự bằng cách sử dụng jquery?
CẬP NHẬT : Hoặc làm thế nào để truy cập trang mẹ iFrame bằng jquery?


Câu trả lời:


489

Để tìm trong phần gốc của iFrame, hãy sử dụng:

$('#parentPrice', window.parent.document).html();

Tham số thứ hai cho trình bao bọc $ () là bối cảnh để tìm kiếm. Điều này mặc định cho tài liệu.


18
Thật tuyệt - bạn đã thừa nhận lời cảm ơn trước khi anh ấy cảm ơn bạn. StackOverflow có vấn đề với múi giờ có thể?
belugabob

21
Bạn cũng có thể làm: $ (window.parent.document) .find ("# Parentprice"). Html ();
jhorback

@belugabob Đó là lỗi của wizzard.
Erik Escobedo

1
Đối với những người đã khởi chạy một Windoid với window.open, đừng quên về window.opener.document tiêu chuẩn cũ đó. $ ("# someDiv", window.opener.document) hoạt động.
jjohn

2
Điều này sẽ chỉ hoạt động nếu nguồn của iframe đã tải jQuery. Theo kinh nghiệm của tôi, nguồn iframe sẽ không có jQuery nhưng thường cần phải gọi một trong các hàm jQuery của cha mẹ. Để thực hiện việc này, hãy sử dụng: window.document. $ ("# Parentprice"). Html () Đây là câu trả lời Álvaro G. Vicario đã đăng.
David Kinkead

39

Cách truy cập trang mẹ iFrame bằng jquery

window.parent.document.

jQuery là một thư viện trên JavaScript, không phải là sự thay thế hoàn toàn cho nó. Bạn không phải thay thế mọi biểu thức JavaScript cuối cùng bằng một cái gì đó liên quan đến $.


6
+1. jQuery rất tuyệt, nhưng rất nhiều câu trả lời cho các vấn đề đơn giản dường như là 'sử dụng jQuery'. Nếu bạn đang tải thư viện, tốt thôi, nhưng đừng tải nó một nhiệm vụ. Ngoài ra, mọi người dường như quan tâm đến sự hoàn hảo của JS, sau đó sử dụng API trên đầu trang của JS để thực hiện mọi thứ dễ dàng có thể (và có thể nhanh hơn) mà không cần API.
Grant Wagner

1
@Grant Mặc dù tôi mơ ước jQuery trở thành mã riêng trong các trình duyệt.
Dan thổi vào

3
@Blowski: đó là cơn ác mộng của tôi! jQuery chứa rất nhiều mã cực kỳ phức tạp và dễ vỡ, thực hiện theo ý tôi là mã Code hoàn toàn không phù hợp để đưa vào một API chính thức.
bobince

1
@bobince: Rõ ràng, bạn phải luôn thay thế tất cả Javascript bằng jQuery. Nó giống như thịt xông khói; không có tình huống trong đó ít hơn là tốt hơn. ;)
MW.

2
OP đã có window.parent.document, vì vậy điều này không trả lời bất cứ điều gì. Và hãy tưởng tượng logic bộ chọn phức tạp hơn nhiều so với ID của một phần tử, một tình huống trong đó jQuery rất tiện dụng. Tôi cảm thấy như câu hỏi là "làm thế nào để tôi nói 'xin chào' bằng tiếng Pháp?" và câu trả lời này là "nói tiếng Đức".
Grantwparks

13

Nếu bạn cần tìm phiên bản jQuery trong tài liệu gốc (ví dụ: để gọi một hàm tiện ích được cung cấp bởi một trình cắm thêm), hãy sử dụng một trong các cú pháp sau:

  • window.parent.$
  • window.parent.jQuery

Thí dụ:

window.parent.$.modal.close();

jQuery được gắn vào windowđối tượng và đó là những gì window.parent.


Tôi đang sử dụng iframe của mình như điều khiển người dùng. Điều này cho phép tôi giữ cho nó tốt đẹp và sạch sẽ.
Dan Randolph

11

Bạn có thể truy cập các phần tử của cửa sổ cha mẹ từ trong iframe bằng cách sử dụng window.parentnhư thế này:

// using jquery    
window.parent.$("#element_id");

Điều này giống như:

// pure javascript
window.parent.document.getElementById("element_id");

Và nếu bạn có nhiều iframe lồng nhau và bạn muốn truy cập iframe cao nhất, thì bạn có thể sử dụng window.topnhư thế này:

// using jquery
window.top.$("#element_id");

Điều này giống như:

// pure javascript
window.top.document.getElementById("element_id");

7

trong cửa sổ cha mẹ đặt:

<script>
function ifDoneChildFrame(val)
{
   $('#parentPrice').html(val);
}
</script>

và trong tệp ifrc src đặt:

<script>window.parent.ifDoneChildFrame('Your value here');</script>

5

yeah nó làm việc cho tôi là tốt.

Lưu ý: chúng ta cần sử dụng window.parent.document

    $("button", window.parent.document).click(function()
    {
        alert("Functionality defined by def");
    });

5

Nó làm việc cho tôi với một chút thay đổi. Trong trường hợp của tôi, tôi phải nhập giá trị từ dạng POPUP vào dạng PARENT WINDOW.

Vì vậy, tôi đã sử dụng $('#ee_id',window.opener.document).val(eeID);

Thông minh!!!


3

Có thể hơi muộn với trò chơi ở đây, nhưng tôi mới phát hiện ra plugin jQuery tuyệt vời này https://github.com/mkdynamic/jquery-popupwindow . Về cơ bản, nó sử dụng một sự kiện gọi lại onUnload, vì vậy về cơ bản nó sẽ lắng nghe việc đóng cửa sổ con và sẽ thực hiện bất kỳ nội dung cần thiết nào tại thời điểm đó. Vì thực sự không cần phải viết bất kỳ JS nào trong cửa sổ con để gửi lại cho cha mẹ.


1

Có nhiều cách để làm những điều này.

I) Nhận phụ huynh trực tiếp.

Cho exa. tôi muốn thay thế trang con của tôi thành iframe rồi

var link = '<%=Page.ResolveUrl("~/Home/SubscribeReport")%>';
top.location.replace(link);

ở đây top.location được cha mẹ trực tiếp.

II) nhận cha mẹ từng người một,

var element = $('.iframe:visible', window.parent.document);

ở đây nếu bạn có nhiều hơn một iframe, sau đó chỉ định một kích hoạt hoặc hiển thị.

bạn cũng có thể làm như thế này để có thêm cha mẹ,

var masterParent = element.parent().parent().parent()

III) nhận cha mẹ bằng Mã định danh.

var myWindow = window.top.$("#Identifier")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.