วิธีการเข้าถึงหน้าหลัก iFrame โดยใช้ jquery?


267

ฉันมี iframe และเพื่อเข้าถึงองค์ประกอบหลักฉันใช้รหัสต่อไปนี้:

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

วิธีรับผลลัพธ์เดียวกันโดยใช้ jquery
ปรับปรุง : หรือวิธีการเข้าถึงหน้าหลัก iFrame โดยใช้ jquery?


คำตอบ:


489

ในการค้นหาในพาเรนต์ของ iFrame ให้ใช้:

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

พารามิเตอร์ที่สองสำหรับ wrapper $ () เป็นบริบทที่ต้องการค้นหา ค่าเริ่มต้นนี้เป็นเอกสาร


18
เด็ด - คุณยอมรับคำขอบคุณก่อนที่เขาจะขอบคุณคุณ StackOverflow มีปัญหากับเขตเวลาหรือไม่
belugabob

21
คุณสามารถทำได้เช่น: $ (window.parent.document) .find ("# parentPrice"). html ();
jhorback

@belugabob มันเป็นความผิดของพ่อมด
Erik Escobedo

1
สำหรับผู้ที่เปิดหน้าต่าง windoid ด้วย window.open อย่าลืมหน้าต่างเก่าของ JS standard.opener.document $ ("# someDiv", window.opener.document) ใช้งานได้
jjohn

2
สิ่งนี้จะทำงานได้ถ้าแหล่งที่มาของ iframe โหลด jQuery แล้ว จากประสบการณ์ของฉันแหล่ง iframe จะไม่มี jQuery แต่จำเป็นต้องเรียกใช้ฟังก์ชัน jQuery ของผู้ปกครองอย่างใดอย่างหนึ่ง ในการใช้ประโยชน์นี้: window.document. $ ("# parentPrice"). html () นี่คือคำตอบที่Álvaro G. Vicario ติดประกาศไว้
David Kinkead

39

วิธีการเข้าถึงหน้าหลักของ iFrame โดยใช้ jquery

window.parent.document

jQuery เป็นห้องสมุดที่อยู่ด้านบนของ JavaScript ไม่ใช่การแทนที่ที่สมบูรณ์สำหรับมัน คุณไม่จำเป็นต้องแทนที่นิพจน์ JavaScript ล่าสุดทั้งหมดด้วยบางสิ่งที่เกี่ยวข้องกับ $


6
+1 jQuery ยอดเยี่ยม แต่คำตอบสำหรับปัญหาง่าย ๆ ดูเหมือนจะ 'ใช้ jQuery' หากคุณกำลังโหลดห้องสมุดอยู่ดี แต่อย่าโหลดมันหนึ่งงาน นอกจากนี้ผู้คนดูเหมือนจะกังวลเกี่ยวกับ JS perf จากนั้นใช้ API ที่อยู่ด้านบนของ JS เพื่อทำสิ่งต่าง ๆ ที่เป็นไปได้อย่างง่ายดาย (และอาจเร็วกว่า) โดยไม่มี API
Grant Wagner

1
@Grant ถึงแม้ว่าฉันจะฝันที่จะได้ jQuery กลายเป็นรหัสพื้นเมืองในเบราว์เซอร์
Dan Blows

3
@Blowski: นั่นคือฝันร้ายของฉัน! jQuery มีโค้ด“ ทำในสิ่งที่ฉันหมายถึง” ที่ซับซ้อนมากและบอบบางซึ่งจะไม่เหมาะสมอย่างสมบูรณ์ที่จะใส่ใน API อย่างเป็นทางการ
bobince

1
@bobince: เห็นได้ชัดว่าคุณควรเสมอแทนที่ Javascript ทั้งหมดกับ jQuery มันเหมือนเบคอน ไม่มีสถานการณ์ใดที่จะดีไปกว่านี้ ;)
MW

2
OP มี window.parent.document อยู่แล้วดังนั้นจึงไม่ตอบอะไรเลย ลองจินตนาการถึงตรรกะของตัวเลือกที่ซับซ้อนกว่า ID ขององค์ประกอบซึ่งเป็นสถานการณ์ที่ jQuery มีประโยชน์ ฉันรู้สึกว่าคำถามคือ "ฉันจะพูดว่า 'สวัสดี' ในภาษาฝรั่งเศสได้อย่างไร" และคำตอบนี้คือ "พูดภาษาเยอรมัน"
grantwparks

13

หากคุณต้องการค้นหาอินสแตนซ์ jQuery ในเอกสารพาเรนต์ (เช่นเพื่อเรียกใช้ฟังก์ชันยูทิลิตี้ที่มีให้โดยปลั๊กอิน) ให้ใช้หนึ่งในไวยากรณ์เหล่านี้:

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

ตัวอย่าง:

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

jQuery ได้รับการติดอยู่กับwindowวัตถุและว่าสิ่งที่window.parentเป็น


ฉันใช้ iframe ของฉันเหมือนควบคุมผู้ใช้ มันทำให้ฉันดูดีและสะอาด
Dan Randolph

11

คุณสามารถเข้าถึงองค์ประกอบของหน้าต่างหลักจากภายใน iframe โดยใช้window.parentสิ่งนี้:

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

ซึ่งเหมือนกับ:

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

และถ้าคุณมี iframe ซ้อนกันมากกว่าหนึ่งรายการและคุณต้องการเข้าถึง iframe สูงสุดคุณสามารถใช้window.topดังนี้:

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

ซึ่งเหมือนกับ:

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

7

ในหน้าต่างหลักใส่:

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

และใน iframe src ให้ใส่:

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

5

ใช่มันใช้งานได้สำหรับฉันเช่นกัน

หมายเหตุ: เราจำเป็นต้องใช้ window.parent.document

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

5

มันทำงานสำหรับฉันด้วยการบิดเล็กน้อย ในกรณีของฉันฉันต้องเติมค่าจากแบบฟอร์ม POPUP JS ไปยัง PARENT WINDOW

ดังนั้นฉันได้ใช้ $('#ee_id',window.opener.document).val(eeID);

ที่ดีเยี่ยม !!!


3

อาจจะเป็นเพียงเล็กน้อยปลายที่จะเล่นเกมที่นี่ แต่ผมเพิ่งค้นพบที่ยอดเยี่ยมนี้ jQuery ปลั๊กอินhttps://github.com/mkdynamic/jquery-popupwindow โดยทั่วไปจะใช้เหตุการณ์การโทรกลับของ unUnload ดังนั้นโดยทั่วไปจะคอยฟังการปิดหน้าต่างลูกและจะดำเนินการสิ่งที่จำเป็นในตอนนั้น ดังนั้นไม่จำเป็นต้องเขียน JS ใด ๆ ในหน้าต่างลูกเพื่อส่งกลับไปยังผู้ปกครอง


1

มีหลายวิธีในการทำสิ่งเหล่านี้

ฉัน) รับผู้ปกครองหลักโดยตรง

สำหรับ exa ฉันต้องการแทนที่หน้าย่อยของฉันเป็น iframe แล้ว

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

ที่นี่top.locationรับผู้ปกครองโดยตรง

II) รับพาเรนต์ทีละรายการ

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

ที่นี่หากคุณมี iframe มากกว่าหนึ่งรายการจากนั้นระบุที่ใช้งานอยู่หรือที่มองเห็นได้

คุณสามารถทำสิ่งเหล่านี้เพื่อรับพ่อแม่ต่อไป

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

III) รับ parent โดย Identifier

var myWindow = window.top.$("#Identifier")
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.