การเลือกองค์ประกอบใน iFrame jQuery


122

ในแอปพลิเคชันของเราเราแยกวิเคราะห์หน้าเว็บและโหลดลงในหน้าอื่นใน iFrame องค์ประกอบทั้งหมดในหน้าที่โหลดนั้นมี tokenid-s ฉันต้องการเลือกองค์ประกอบตาม tokenid-s เหล่านั้น หมายถึง - ฉันคลิกที่องค์ประกอบในหน้าหลักและเลือกองค์ประกอบที่เกี่ยวข้องในหน้าใน iFrame ด้วยความช่วยเหลือของ jQuery ฉันทำด้วยวิธีต่อไปนี้:

function selectElement(token) {
     $('[tokenid=' + token + ']').addClass('border'); 
}

อย่างไรก็ตามด้วยฟังก์ชั่นนี้ฉันสามารถเลือกองค์ประกอบในเพจปัจจุบันเท่านั้นไม่ใช่ใน iFrame ใครช่วยบอกทีฉันจะเลือกองค์ประกอบใน iFrame ที่โหลดได้อย่างไร

ขอบคุณ

คำตอบ:


157
var iframe = $('iframe'); // or some other selector to get the iframe
$('[tokenid=' + token + ']', iframe.contents()).addClass('border');

โปรดทราบว่าหากsrciframe นี้ชี้ไปที่โดเมนอื่นเนื่องจากเหตุผลด้านความปลอดภัยคุณจะไม่สามารถเข้าถึงเนื้อหาของ iframe นี้ในจาวาสคริปต์ได้


8
โปรดทราบว่า $ ('iframe') ไม่ได้ส่งคืน iframe โดยตรง คุณต้องดึงออกจากอาร์เรย์
McKayla

ขอบคุณสำหรับความเต็มใจที่จะช่วยเหลือ แต่ดูเหมือนจะไม่ได้ผล
cycero

3
@cycero มันควรจะทำงาน คุณกำลังสร้าง iframe นี้แบบไดนามิกหรือไม่? อย่าลืมว่าหากคุณชี้องค์ประกอบ src ของ iframe นี้ไปยังโดเมนอื่นที่ไม่ใช่โดเมนของคุณเนื่องจากเหตุผลด้านความปลอดภัยคุณจะไม่สามารถเข้าถึงเนื้อหาได้
Darin Dimitrov

ฉันไม่ได้โหลดมาจากโดเมนอื่น แต่มาจากโฟลเดอร์เดียวกัน เนื้อหา iFrame จะถูกสร้างขึ้นแบบไดนามิกและจัดเก็บเป็นไฟล์บนเซิร์ฟเวอร์ จากนั้นไฟล์นั้นจะถูกโหลดใน iFrame
cycero

@cycero ฉันได้อัปเดตคำตอบแล้ว ลองผ่านiframe.contents()
Darin Dimitrov

52

ดูโพสต์นี้: http://praveenbattula.blogspot.com/2009/09/access-iframe-content-using-jquery.html

$("#iframeID").contents().find("[tokenid=" + token + "]").html();

วางตัวเลือกของคุณในวิธีการค้นหา

อย่างไรก็ตามอาจไม่สามารถทำได้หาก iframe ไม่ได้มาจากเซิร์ฟเวอร์ของคุณ โพสต์อื่น ๆ พูดถึงข้อผิดพลาดที่ถูกปฏิเสธการอนุญาต

jQuery / JavaScript: เข้าถึงเนื้อหาของ iframe


ซึ่งใช้ได้ผลในแง่ของการรับ HTML ขององค์ประกอบ แต่ฉันจะเพิ่มคลาส CSS ให้กับองค์ประกอบที่เลือกนั้นได้อย่างไร $ ("# iframeDiv"). contents (). find ("[tokenid =" + token + "]"). addClass ("เส้นขอบ"); ดูเหมือนจะไม่ทำงาน
cycero

1
คุณได้รับข้อผิดพลาดถูกปฏิเสธการอนุญาตหรือไม่? คุณสามารถให้ html ของ iframe ได้หรือไม่?
Kevin Bowersox

ไม่ปัญหาการอนุญาตถูกปฏิเสธ
cycero

20

เมื่อเอกสารของคุณพร้อมนั่นไม่ได้หมายความว่า iframe ของคุณก็พร้อมเช่นกัน
ดังนั้นคุณควรฟังเหตุการณ์โหลด iframe จากนั้นเข้าถึงเนื้อหาของคุณ:

$(function() {
    $("#my-iframe").bind("load",function(){
        $(this).contents().find("[tokenid=" + token + "]").html();
    });
});

-3

หากกรณีนี้กำลังเข้าถึง IFrame ผ่านคอนโซลเช่น Chrome Dev Tools คุณสามารถเลือกบริบทของคำขอ DOM ผ่านทางดรอปดาวน์ (ดูภาพ)

Chrome Dev Tools - การเลือก iFrame


-9

นี่คือ JQuery ง่ายๆในการทำสิ่งนี้เพื่อให้ div สามารถลากได้ด้วยคอนเทนเนอร์เท่านั้น:

$("#containerdiv div").draggable( {containment: "#containerdiv ", scroll: false} );
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.