Невозможно удалить элемент DOM (JavaScript, CreateJS)

У меня проблема с удалением DOMElement со сцены. Вот как я создал свой domElement с помощью createjs Framework.

this.domElement = new createjs.DOMElement(document.getElementById('nickname'));
    this.domElement.x = 580;
    this.domElement.y = 200;
    this.stage.addChild(this.domElement);

Мой HTML-код выглядит так:

<form id="myForm" style="visibility: hidden">
<input id="nickname" value="" size="10">

Everything works fine till I want to remove "domElement" from the stage. Here is how I attempted it:

this.stage.removeChild(this.domElement);

Я также пробовал другие решения, такие как:

this.stage.parentNode.removeChild(this.domElement);

У вас есть идея, почему я не могу удалить этот элемент DOM?

Заранее спасибо за вашу помощь


person CMS    schedule 18.09.2013    source источник
comment
Что такое this.stage? Вы пытались удалить this.domElement.htmlElement? - .htmlElement   -  person Andreas    schedule 18.09.2013
comment
this.stage я создал с помощью createjs следующим образом: this.stage = new createjs.Stage(this.canvas);   -  person CMS    schedule 18.09.2013
comment
Привет, Андреас, я попробовал ваше решение, и я до сих пор не могу его удалить. Компилятор не выдает ошибки, но DOMElement все еще находится в стадии разработки.   -  person CMS    schedule 18.09.2013
comment
Привет, Андреас, я думаю, что невозможно удалить htmlElement с HTML-страницы. В моем примере я создал элемент DOME из элемента html, а затем расположил этот элемент DOME на сцене/холсте, но он не был нарисован на холсте. Поэтому, если я удалю DOMElement, htmlElement все еще будет там. Мне удалось избавиться от него, только изменив его координаты, расположив его за пределами холста. Спасибо за попытку помочь мне. Хорошего дня!   -  person CMS    schedule 18.09.2013
comment
Извините, но я запутался с createJS. К сожалению, я не могу помочь вам с этим...   -  person Andreas    schedule 18.09.2013
comment
Я думаю, что удаление Dom-Element со сцены только отсоединит его, но, поскольку это элемент HTML, он все равно будет виден, поэтому вам придется сделать его невидимым или удалить вручную - использование createjs для DOMElements обычно только используется для позиционирования элементов на основе координат сцены, однако они отображаются отдельно.   -  person olsn    schedule 18.09.2013
comment
Я должен использовать DOMElement с createjs, потому что мне нужно, чтобы пользователь/игрок создал имя пользователя. Единственный способ получить имя пользователя и сохранить его — создать DOMElement из HTMLElement с помощью createjs. И, как сказал @olsn, он все равно будет виден, поэтому я пришел с идеей разместить DOMElement над холстом / сценой, чтобы игрок больше не мог его видеть. Если вы знаете другую возможность, как это сделать, пожалуйста, дайте мне знать. Решение, которое я использую сейчас, работает нормально, но это не так, как я хотел. Спасибо, что написали Андреасу и olsn!   -  person CMS    schedule 18.09.2013


Ответы (2)


Удаление элемента DOMElement из рабочей области не повлияет на связанный элемент html, который он обертывает. DOMElement полезен для управления положением, преобразованием и видимостью HTML-элемента, но если вы удалите его из рабочей области, HTML-элемент не пострадает, так как этот элемент никогда не находится на рабочей области.

Вам придется вручную удалить элемент html из DOM браузера. Обратите внимание, что этап не является элементом HTML, поэтому у него нет «родительского узла». Вместо этого может работать что-то вроде этого:

domElement.htmlElement.parentNode.removeChild(domElement.htmlElement);

Ваше здоровье.

person Lanny    schedule 19.09.2013
comment
Привет @Lany, спасибо за ответ. Да, вы правы в том, что удаление DOMElement со сцены не повлияет на HTMLElement, он все равно будет там. Вот почему я изменил координаты элемента DOM и переместил его за пределы сцены. Это единственная возможность избавиться от него. Я попробовал ваше решение, но мой компилятор выдает ошибку: значение не является объектом; - person CMS; 23.09.2013
comment
Вы добавили ключевое слово «это»? - person Mild Fuzz; 28.09.2013

Решение @Lanny по удалению элемента из DOM действительно работает. Однако, если вы захотите снова использовать этот элемент DOM, он исчезнет. Поэтому я обнаружил, что сделать элемент скрытым - лучшее решение, во всяком случае, в моем случае.

domElement.htmlElement.style.visibility = "hidden";

Если у вас больше нет ссылки на DOMElement createjs, вы можете получить к нему доступ следующим образом:

document.getElementById("_id_").style.visibility = "hidden";
person John McCann    schedule 27.06.2015