Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.07.2010, 17:26
Аспирант
Отправить личное сообщение для Арсений Посмотреть профиль Найти все сообщения от Арсений
 
Регистрация: 14.05.2010
Сообщений: 34

Как можно удалить динамически созданный элемент
я создаю элемент вот таким способом
document.getElementById( 'img' ).onclick = function (e) {
e = e || window.event
var div = document.createElement( "div" );
div.id = "el";
div.setAttribute("style","position:absolute; width:4px; height:4px; background-color:blue; top:"+e.pageY+"px; left:"+e.pageX+"px;");
div.setAttribute("onmouseup", "release()");
div.setAttribute("onmousedown", "capture(event)");
div.setAttribute("oncontextmenu", "return menu(1, event);");
document.body.appendChild( div );
}

А затем если нажать правой кнопкой по нему мы попадем в меню.
Вот отрывок кода этого меню
var menu = document.getElementById("contextMenuId");
    var html = "";
    switch (type) {
        case (1) :
            html = "Меню";
            html += "<br />Название";
            html += "<br />Описание";
            html += "<br /><a onclick='el_delete()' href='#'>Удалить</a>";
			html += "<br /><a onclick='menuclose()' href='#'>Закрыть</a>";
        break;


Но скажем если я создал где-то 10-20 таких элементов и нажму на любом из них то каким образом мне можно его удалить?
Подскажите хотя бы теорией, а то я даже не представляю себе это.
Ответить с цитированием
  #2 (permalink)  
Старый 05.07.2010, 14:06
Аспирант
Отправить личное сообщение для Арсений Посмотреть профиль Найти все сообщения от Арсений
 
Регистрация: 14.05.2010
Сообщений: 34

ммм ни кто не знает или всем лень подсказать?
Ответить с цитированием
  #3 (permalink)  
Старый 05.07.2010, 19:43
Аспирант
Отправить личное сообщение для haha Посмотреть профиль Найти все сообщения от haha
 
Регистрация: 02.08.2009
Сообщений: 40

Ссылку на создаваемый див сохранять отдельно в глобальном скопище, а потом спокойно удалять div.parentNode.removeChild(div). как-то так.
И вообще, можно не создавать каждый раз новое меню, достаточно одну менюшку скрыть и показать, когда нужно. Ну и функции будут слегка другими.
Ответить с цитированием
  #4 (permalink)  
Старый 05.07.2010, 20:50
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

Сообщение от haha
И вообще, можно не создавать каждый раз новое меню,
а потом все пользователи удивляются. почему сайт то так тормозит? а в нем же куча элементов скрыто.
А если скрытый элемент не подходит ? если надо динамически править структуру ? вы ее будете кодом править?
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
Ответить с цитированием
  #5 (permalink)  
Старый 06.07.2010, 07:20
Аспирант
Отправить личное сообщение для haha Посмотреть профиль Найти все сообщения от haha
 
Регистрация: 02.08.2009
Сообщений: 40

Кто пишет тормозное меню, тому и создание/удаление не поможет.
Ответить с цитированием
  #6 (permalink)  
Старый 06.07.2010, 10:59
Аспирант
Отправить личное сообщение для pandasensey Посмотреть профиль Найти все сообщения от pandasensey
 
Регистрация: 24.02.2010
Сообщений: 55

var root = document.createElement("DIV"), //Тут мы создаем корневой элемент
node = document.createElement("DIV"); //А тут создаем чайлда

root.appendChild(node);
document.body.appendChild(root);

В итоге у нас получается два новых, созданных динамически, элемента, ссылки на которых мы записали в соответствующие переменные. Далее мы можем сделать так:

root.removeChild(node);

или
root.removeChild(root.lastNode);


Для того, чтобы работало в твоем случае - достаточно хранить все ссылки в массиве или объекте - как удобнее. Но согласен с общим мнением по поводу неверного подхода.

Такой подход очень плохо работает с элементами типа IMG, так как далеко не всегда при удалении их из DOM-структуры, они удаляются из очереди загрузки броузера и у них по прежнему могут выскакивать события onload и т.д.

Последний раз редактировалось pandasensey, 06.07.2010 в 11:04.
Ответить с цитированием
  #7 (permalink)  
Старый 06.07.2010, 11:39
Аспирант
Отправить личное сообщение для Арсений Посмотреть профиль Найти все сообщения от Арсений
 
Регистрация: 14.05.2010
Сообщений: 34

haha
а где можно прочесть о том, как сохранить ссылку на создаваемый элемент?
Я только на днях где то видел, как это делать но не придал этому значения и пропустил мимо ушей, а теперь жалею очень сильно.
Ответить с цитированием
  #8 (permalink)  
Старый 06.07.2010, 12:37
Аспирант
Отправить личное сообщение для haha Посмотреть профиль Найти все сообщения от haha
 
Регистрация: 02.08.2009
Сообщений: 40

Арсений,
Области видимости переменных в функциях. Как-то так надо искать. Скрещивать с DOM надо правильно, и все получится.


function (e) {
e = e || window.event;
var div = document.createElement( "div" );
div.id = "el";
div.setAttribute("style","position:absolute; width:4px; height:4px; background-color:blue; top:"+e.pageY+"px; left:"+e.pageX+"px;");
div.setAttribute("onmouseup", "release()");
div.setAttribute("onmousedown", "capture(event)");
div.setAttribute("oncontextmenu", "return menu(1, event);");
document.body.appendChild( div );
}

в этой функции нужно вынести переменную div наружу, тогда созданный элемент станет легко досягаем.
Ответить с цитированием
  #9 (permalink)  
Старый 06.07.2010, 13:11
Аспирант
Отправить личное сообщение для pandasensey Посмотреть профиль Найти все сообщения от pandasensey
 
Регистрация: 24.02.2010
Сообщений: 55

Цитата:
как сохранить ссылку на создаваемый элемент
Я же написал:
var root = document.createElement("DIV")

После выполнения этой команды в переменную root будут записана ссылка на созданный элемент. И после добавления этого элемента к чему-дибо (appendChild) ссылка остается. Ты можешь создавать это и в цикле и присваивать элементам массива ссылки на новые элементы:
var root = document.createElement('DIV'),
temp = document.createDocumentFragment(); //Это важно, потому что в цикле добавлять элементы к чему-то существующему на странице - неэтично)
var links = [];
for (var i = 0; i < 10; i++) {
  links[i] = document.createElement('DIV');
  temp.appendChild(links[i]);
}
//В этом цикле мы создали 10 DIV'ов во временном контейнере и записали ссылки на них в массив links
root.appendChild(temp);
document.body.appendChild(root);
Ответить с цитированием
  #10 (permalink)  
Старый 06.07.2010, 16:05
Аспирант
Отправить личное сообщение для Арсений Посмотреть профиль Найти все сообщения от Арсений
 
Регистрация: 14.05.2010
Сообщений: 34

pandasensey
Я вас понял но выходит что тут создается сразу 10ть диваков а мне нужно что бы диваки создавались по одному.
Вот смотрите:
шаг1 - Я нажимаю левую кнопку мыши на картинке создается дивак1
шаг2 - Я нажимаю левую кнопку мыши на картинке создается дивак2
...
шаг10 - Я нажимаю левую кнопку мыши на картинке создается дивак10
шаг11 - Я нажимаю левую\правую кнопку мыши на дивак5 появляется меню для удаления дивака

Последний раз редактировалось Арсений, 06.07.2010 в 16:07.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить элемент из дерева DOM dummer jQuery 13 16.01.2011 16:19
Как удалить элемент из документа HTML Dima00782 Общие вопросы Javascript 2 28.06.2010 17:32
Как удалить элемент массива? velo Общие вопросы Javascript 2 05.02.2010 15:58
можно ли, если да то как удалить строки из таблицы Avaria Я не знаю javascript 3 11.06.2009 03:03
имея this как удалить элемент из тела html clgs Общие вопросы Javascript 1 13.05.2009 17:55