JavaScript RemoveChild Lógica/Pergunta
-
20-09-2019 - |
Pergunta
Estou usando o dojo arrastar e soltar. Quando um usuário adiciona um item a um contêiner (div dojotype = 'dojo.dnd.source'), preciso colocar esses dados em um formulário para que eu possa processá -lo posteriormente em um servidor quando o usuário enviar a página inteira. Essa parte está funcionando. Em seguida, para remover um item, permito que eles arraste/soltem um item para um contêiner "lixo". Estou tendo conceituação difícil de remover o item dos campos ocultos. Eu já tenho código de inscrição/evento para chamar as duas funções a seguir.
Você pode me informar se houver uma maneira melhor de fazer a função RemovaGealFromhiddenfields? Pode haver muitos itens "subgoéticos".
Estou prestes a começar a testar com o que tenho abaixo, mas tenho algumas dúvidas sobre isso.
Obrigado,
Neal Walters
function addGoalToHiddenFields( goalText){
var field = document.createElement("input");
field.setAttribute("type","hidden");
field.setAttribute("value",goalText);
field.setAttribute("name","subgoal");
//add new hidden-element to the existing form
document.getElementById("form1").appendChild(field);
}
function removeGoalFromHiddenFields( goalText){
//remove hidden field
nodes = document.getElementById("form1")
for (i=0;i<nodes.length ;i++ )
{
var pos = nodes[i].innerHTML.IndexOf(goalText)
if (pos > 0)
{
nodes.removeChild(node[i]);
}
}
}
Além disso, posso fazer isso: nós = document.getElementById ("subgoeal")
Solução
Estou supondo que o que você quer aqui é a funcionalidade de Dojo.Query.
Tente algo como:
dojo.query("#form1 input[value=\"" + goalText + "\"]").forEach(function(field) {
field.parentNode.removeChild(field)
});
Outras dicas
field.setAtAttribute ("tipo", "Hidden");
Não use o setAttribute nos documentos HTML. Existem muitos bugs nele no IE. Use as propriedades normais do DOM-HTML, que também são mais fáceis de ler:
field.type= 'hidden';
var pos = nó [i] .innerhtml.indexOf (GoalText)
Pesquisar através da marcação HTML por um valor é bobo e não funcionará quando o GoletExt contiver um personagem como '<' ou '&' que o HTML escapará.
Para o código acima, parece nodes[i]
deve ser um dos <input>
elementos que você anexou lá, nesse caso innerHTML
Não é bom, pois ele pesquisará apenas o conteúdo da entrada, o que não é nada, pois a entrada é um elemento vazio. Em vez disso, olhe para o value
Propriedade que você colocou lá:
var input= nodes[i];
if (input.name=='subgoal' && input.value==goalText)
input.parentNode.removeChild(input);
Além disso, posso fazer isso: nós = document.getElementById ("subgoeal")
Não, pois seus elementos subgois não têm IDs. Obtenha pelo nome:
var subgoals= form.getElementsByName('subgoal');
(que é o mesmo que dom-0 :)
var subgoals= form.elements.subgoal;
Ou adicione um ID a cada subgoal para ajudá -lo a recuperá -lo mais tarde:
field.id= 'id-'+goalText;
O exposto acima não funcionará, novamente, se você puder ter personagens especiais no goleiro.
Como alternativa, mantenha sua própria pesquisa em JavaScript em vez de colocar tudo no DOM:
var subgoalfields= {};
...
// on add
subgoalfields[goalText]= field;
...
// on remove
subgoalfields[goalText].parentNode.removeChild(subgoalfields[goalText]);
delete subgoalfields[goalText];