ID uit bovenliggend venster verwijderen uit een iframe

Om verschillende redenen zit ik vast in een poging een parent-div te verwijderen uit een functie die afkomstig is van een iframe. De div die moet worden verwijderd uit de dom (niet verborgen) heeft een unieke id toegewezen gekregen.

Dus zeg dat ik deze div in ouder heb:

<body>
    <div id="foo_123" class="bar">STUFF</div>

In het iframe gegenereerd op die pagina heb ik dit om die unieke id te pakken

var curWin = window.top.document.getElementsByClassName('bar')[0].id;

so in this example curWin = foo_123

Nu in dezelfde functie die die variabele krijgt, moet ik die div volledig van de bovenliggende pagina kunnen verwijderen. Ik heb een prototype om mee te werken en ik heb geprobeerd het te doen

$(curWin).remove();

Maar dat werkte niet, het geeft alleen een foutmelding dat $ (curWin) null is. Maar als ik echo curWin het geeft me dat juiste id.

Any ideas on how I can do this. I tried using removeChild too but again I am not sure how to do it when it is the child of the <body> in the parent document.

Laat me alsjeblieft niet vertellen hoe geweldig jQuery is. Ik weet dat dit gemakkelijke bonen zijn, maar ik heb niet zoveel luxe met dit project.

1
Vergeef me, want ik heb me laten verwennen met jQuery, maar als curWin de tekenreeks van de elementen-ID bevat, zou je dan niet document.getElementById (curWin) .remove() ?
toegevoegd de auteur Mike C, de bron
@Neurotrace, .verwijderen is jQuery-suiker, normaal element heeft dat niet. Normaal om een ​​element te verwijderen zonder enig kader dat u zou doen elemRef.parentNode.removeChild (elemRef);
toegevoegd de auteur Esailija, de bron

5 antwoord

De beste manier die ik heb gevonden om elementen van de ouder te krijgen via een iFrame is als volgt (merk op dat je iframe een id zou hebben en zoals getoond heb ik #iframID gebruikt)

x=document.getElementById("iframID");
y=(x.contentWindow || x.contentDocument);
$(y.document).find("#foo_123").remove();
0
toegevoegd

Proberen:

var curWin = parent.top.document.getElementById('yourDivId');
$(curWin).remove();
0
toegevoegd

Als je een prototype in het bovenste venster hebt:

. boven $ (curWin) .Verwijder ();

Het zoekt naar "foo_123" in het bovenste venster (waar het bestaat) in plaats van het iframe (waar het niet bestaat)

0
toegevoegd
Ahhh ja! Een uur van bonken mijn hoofd op het bureau = geen resultaat. 5 minuten op SO = succes! Bedankt. Ik zal zo snel mogelijk accepteren.
toegevoegd de auteur Zac, de bron

Gebruik parent.document , niet window.top . Neem ook het hele element, niet de ID:

var curWin = parent.document.getElementsByClassName('bar')[0];
curWin.parentNode.removeChild(curWin);

Aanvullende informatie:

MDN iframe docs quote:

Aan de binnenkant van een frame kan een script een verwijzing naar de bovenliggende verwijzing krijgen   venster via window.parent .

See also, .removeChild()

0
toegevoegd

Geef de elementreferentie voor het prototype door, zal sneller zijn dan opnieuw zoeken en waarschijnlijk werken:

var curWin = window.top.document.getElementsByClassName('bar')[0]

Dan kunt u:

$(curWin).remove();
0
toegevoegd