Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   удаление iframe (https://javascript.ru/forum/misc/34202-udalenie-iframe.html)

zaytsewa 24.12.2012 12:46

удаление iframe
 
Всем привет!
Есть div, внутрь которого добавляются и удаляются iframe.

При удалении iframe остаётся рамка от него. Как с этим бороться?

При добавлении потом нового iframe, он добавляется после этой рамки, те остаётся пустое место( дырка ) от предыдущего удалённого фрейма.

<div id='frames_div'>
</div>


в родительском окне добавляется новый iframe:

$("#add_btn").click(function(){
	var v = $(document.createElement("iframe"));
	v.attr("src","form1.html");
	$("#frames_div").append( v );
});


удаляется он сам из себя, кнопка удаления в нём же самом
$("#close_btn").click( function(){
	var v = $(this).parent();
	v.remove();
});


есть какой-то способ корректного удаления фрейма самого из себя, или надо кнопку удаления помещать в родительский фрейм?

Deff 24.12.2012 14:13

Цитата:

Сообщение от zaytsewa
есть какой-то способ корректного удаления фрейма самого из себя, или надо кнопку удаления помещать в родительский фрейм?

$("#close_btn").click( function(){
    $("#frames_div iframe",parent.document.body).remove();
});

zaytsewa 24.12.2012 14:18

#frames_div это id-шник div-элемента, куда помещаются все iframe, у ifame'ов нет id-шников, непонятно по какому принципу их заводить...( как в бд наверное.. )

zaytsewa 24.12.2012 14:20

или тут #frames_div iframe удаляются все дочерние iframe от #frames_div ???

мне нужно, чтобы удалялся именно тот iframe, которому принадлежит #close_btn, на которую нажали

Deff 24.12.2012 14:24

zaytsewa,
Если iframe не один - присвойте им уникальные id и удаляйте по id
К примеру:
#frames_div #iframe_1

zaytsewa 26.12.2012 12:43

не могу разобраться в чём причина
var arr = document.location.search.split("?id=");
	var str = "#frames_div #"+arr[1]
	alert( $(str,parent.document.body).prop('tagName') )


выводит undefined, те какой-то не тот элемент находит...

вообщем похоже на то, что какая-то проблема строковая
ума не приложу какая именно
var str = "#frames_div #"+arr[1] и $(str)

ruslan_mart 26.12.2012 13:17

zaytsewa, потому что запятая должна быть взята в кавычки :)

zaytsewa 26.12.2012 13:41

эээ не поняла... там один аргумент в скобках что ли??

zaytsewa 26.12.2012 13:48

я думала что по смыслу первый селектор второй относительно какого родителя...

так
var str = "#frames_div #"+arr[1]+","+parent.document.body
	alert(str)
	alert( $(str).prop('tagName') )


бред получается...

parent.document.body - это ведь не строка, а объект

ruslan_mart 26.12.2012 14:28

var arr = document.location.search.split("?id=");
    var str = "#frames_div #"+arr[1]
    alert( $(str+', '+parent.document.body).prop('tagName') )

Можно вот так попробовать. :)

И вообще:
$(str).parent('body').prop('tagName');

zaytsewa 26.12.2012 18:02

первая запись видимо вообще некорректна, тк алерт не вызывается

вторая возвращает undefined

Deff 26.12.2012 18:10

zaytsewa,
Чем дальше в лес ...
Приведите минималистический HTML код для блока с фреймами
и ссылки на пару фреймов с кнопками

zaytsewa 26.12.2012 18:15

первая запись некорректна, алерт не срабатывает

вторая выдаёт undefined

Deff 26.12.2012 18:18

HTML код

zaytsewa 26.12.2012 18:20

есть версия, что можно так window.parent.$( ‘#idElement‘ );

но так у меня тоже не работает(

zaytsewa 26.12.2012 18:27

это form1.html, он вставляется несколько раз в виде фреймов
содержит кнопку для удаления и скрытия самого себя
<body>
<button id='close_btn'>X</button><button id='hide_btn'>-</button>
</body>


это главное окно index.html, фреймы вставляются в div ( пример - то что закомментировано )
фреймы вставляются при нажатии кнопки добавить

<div id='frames_div'>
<!--<iframe src='form1.html'>
</iframe>-->
</div>
<button id='add_btn'>Добавить</button>

Deff 26.12.2012 18:28

zaytsewa,
<div id="add_btn">
    <iframe src="реальная ссылка" ... и т.д

Deff 26.12.2012 18:29

Цитата:

Сообщение от zaytsewa
это form1.html, он вставляется несколько раз в виде фреймов

Нужна реальная инет-ссылка на фрейм - дабы продемонстрировать
Есть тестовая страница с оным ?

zaytsewa 26.12.2012 18:54

нет всё в домашнем локалхосте

zaytsewa 26.12.2012 18:55

хотя могу куда-нибудь залить

zaytsewa 26.12.2012 19:32

залила, можно посмотреть http://zaytsewa.yomu.ru/avia/

Deff 26.12.2012 19:44

zaytsewa,
Сделаю ближе к полуночи

ruslan_mart 26.12.2012 19:48

<iframe src="form1.html"/>
<iframe src="form1.html?id=864.3636696461892" id="864.3636696461892"/>
<iframe src="form1.html?id=282.5240789059157" id="282.5240789059157"/>
<iframe src="form1.html?id=977.3967193243343" id="977.3967193243343"/>


function Close()
{
   var a = location.search.split('=')[1];
   parent.$('#'+a).remove();
}

Вот Вам удаление:)

zaytsewa 26.12.2012 20:02

попробовала, не работает(

ruslan_mart 26.12.2012 20:46

zaytsewa, странно, попробуйте задать ID без точек и желательно с буквы.

zaytsewa 26.12.2012 20:52

думаю дело в конкатенации строк, в магических правилах кавычек и тд...
попробую конечно..

zaytsewa 26.12.2012 20:59

проверила - точки не виноваты

Deff 26.12.2012 21:12

zaytsewa,
Контент данного скрипта
$(document).ready(function(){

$("#add_btn").click(function(){
	//var v = $(document.createElement("div"));
	var v = $(document.createElement("iframe"));
	var id = Math.random()*1001;
	v.attr("src","form1.html?id="+id);
	v.attr("id", id);
	//alert(v.attr("id"));
	//v.load("form1.html");
	$("#frames_div").append( v );
	//alert("addButton");
});

$(window).load(function() {
	//var v = $(document.createElement("div"));
	//v.load("form1.html");
	var v = $(document.createElement("iframe"));
	v.attr("src","form1.html");
	$("#frames_div").append( v );
});

/*
function close_form( close_btn )
{
	var v = $(close_btn).parent();
	v.remove();
}

function minimize( hide_btn )
{
var v = $(close_btn).parent();
var isHidden = ( $( "tr:eq(1)").css("display") == 'none');
for ( i = 1; i < 3; ++i )
{
if ( !isHidden )
	v.find($("tr:eq("+i+")")).css('display','none');
else
	v.find($("tr:eq("+i+")")).css('display','');
	}
if ( !isHidden )
	$(hide_btn).text('[ ]');
	else
	$(hide_btn).text('-')
	
}*/

});

замените на этот
function Lload(a){
 //Удаление фрейма
 $(a).contents().find("body #close_btn").click(function(){
   $(a).parent('.div_wrap').remove();
 });
 //Скрытие фрейма
 $(a).contents().find("body #hide_btn").click(function(){
   //$(a).wrap("<div class=div_wrap></div>");
   $(a).addClass("HideIframe").hide();
   $(a).parent().append('<button class="show_btn">show</button>');
 });
 //Раскрытие скрытого фрейма
 $("button.show_btn").live("click",function(){
   $(this).parent().find('.HideIframe').show().removeClass('HideIframe');
   $(this).remove();
   
 });
};
$(document).ready(function(){

$("#add_btn").click(function(){
	var v = $(document.createElement("iframe"));
	v.attr("onload","Lload(this)");
	var id = Math.random()*1001;
	v.attr("src","form1.html?id="+id);
	v.attr("id", id);
	$("#frames_div").append( v );
	v.wrap("<div class=div_wrap></div>");
});

$(window).load(function() {
         $("#add_btn").click();
});


});

================================
И добавьте кусок стиля на главную
<style>
div.div_wrap{
 border:red solid 1px;
 //float:left;
 display:inline-block;
}
</style>

Deff 26.12.2012 21:18

Зы - Можно укоротить скрипт,если кнопки скрытия удаления фрейма вынести из фрейма на главную в div обрамление каждого фрейма

zaytsewa 26.12.2012 21:34

если вынести на главную - то некрасиво будет

zaytsewa 26.12.2012 21:48

вы будете смеяться, но у меня всё равно не работает

Deff 26.12.2012 21:50

zaytsewa,
Воткните замененный скрипт(и добавку к стилю) на тот сайт с примером - я гляну (тестировал в Опере

zaytsewa 26.12.2012 21:54

там примерно так и есть, я только стиль не применила, он функциональный или для красивости??? у меня chrome

Deff 26.12.2012 21:56

zaytsewa,
Если ссылка та же - скрипт в хидере на главной - пока старый
Стиль(кроме бордеров) - функциональный

Deff 26.12.2012 21:59

zaytsewa,
Просто выполните чисто рекомендации по замене ( исходники свои сохраните) посколь комбинация Вашего творчества с ошибками
1. Нун повторить удачный результ
2. Доводить до своих хотелок

zaytsewa 26.12.2012 21:59

теперь должно быть 1 в 1, посмотрите

Deff 26.12.2012 22:04

zaytsewa,
Заработало - но пока ток в Опере -(* пол-часа - час на правку

zaytsewa 26.12.2012 22:09

да в ff и safari проверила не работает

Deff 26.12.2012 23:01

Цитата:

=======ДЕМКА =======
zaytsewa,
Поправил скрипт:
function Lload(a){
 //Удаление фрейма
   $(a).contents().find("body #close_btn").click(function(){
   $(a).parent('.div_wrap').remove();
 });
 //Скрытие фрейма
 $(a).contents().find("body #hide_btn").click(function(){
   //$(a).wrap("<div class=div_wrap></div>");
   $(a).addClass("HideIframe").hide();
   $(a).parent().append('<button class="show_btn">show</button>');
 });
 //Раскрытие скрытого фрейма
 $("button.show_btn").live("click",function(){
   $(this).parent().find('.HideIframe').show().removeClass('HideIframe');
   $(this).remove();
   
 });
};
$(document).ready(function(){

$("#add_btn").click(function(){
	var id = Math.random()*1001;
	var src= "form1.html?id="+id;

	var v = '<div class=div_wrap>\
	<iframe src="'+src+'" onload="Lload(this)" id="'+id+'"/>\
	</iframe></div>';

	$("#frames_div").append( v );
});

});

$(window).load(function() {
         $("#add_btn").click();
});

zaytsewa 26.12.2012 23:28

потрясающе, спасибо!!!
а что изменилось? на глаз не видно


Часовой пояс GMT +3, время: 19:11.