Como anexar um “ponteiro” para elemento DOM para uma mesa de luz em vez de copiá-lo?
-
22-07-2019 - |
Pergunta
Eu tenho um formulário de entrada complexo dentro de um aplicativo baseado na web PHP. Estruturá-la um pouco, eu introduzi "Multifacetado favoritos" para deixar partes do formulário - em linha com o nome DIVs com "display" definido como "none" - aparecem dentro de uma caixa de diálogo estilo "lightbox". Ele funciona muito bem, até agora eu percebi que quando ele exibe uma DIV, ele cópias -lo em sua DIV centrado, tirando-o da forma - e todas as alterações de formulários de entrada contido lá são perdidas.
O código em questão no código mf_lightbox que faz uma DIV em linha em um diálogo lightbox centrado é:
showBoxByID : function(id, boxWidth, boxHeight) {
this.lightboxType = 'id';
this.lightboxCurrentContentID = id;
this.setLightboxDimensions(boxWidth, boxHeight);
var element = $(id);
var contents = $('mf_boxContents');
contents.appendChild(element); // <!-- This is where it happens
Element.show(id);
this.showBox();
return false;
},
alguém sabe uma maneira não cópia , mas de alguma forma "anexar" a div para a camada boxContents, assim que permanece na forma dom-sábio? Como um ponteiro em uma linguagem de programação? Este mf_lightbox é rápido, grande e eu gostaria muito de ficar com ele.
Estou sendo bastante claro? Você começa o que eu quero dizer? Você sabe alternativas Luz que fazem isso de forma diferente?
Agradecemos antecipadamente por suas respostas!
Solução
A solução foi muito mais fácil do que se pensava. Eu só precisava para armazenar o pai do elemento a ser inserido no lightbox:
// Save parent?
this.contentParent = element_to_be_inserted.parentNode;
e no fechamento, mover o elemento de volta para o pai:
// Move elements back to original location
if (this.contentParent != null)
this.contentParent.appendChild($(this.lightboxCurrentContentID));
else
body.appendChild($(this.lightboxCurrentContentID));
Isso deve funcionar da mesma forma para qualquer favoritos lá fora. Apenas appendChild () o elemento de volta ao seu pai quando você está feito.
Uma desvantagem, claro, é que você não pode lidar com a forma envolvente usando "this.form", enquanto os seus elementos estão na lightbox.