JavaScript RemoveChild logic/Frage
-
20-09-2019 - |
Frage
Ich verwende Dojo Drag-and-Drop.Wenn ein Benutzer fügt ein Element in einem container (div dojoType='dojo.dnd.- Source'), dann die ich brauche, um die Daten in eine form, so kann ich später verarbeiten, es auf einem server, wenn der Benutzer einreicht, wird die ganze Seite.Das Teil arbeitet.Dann auf ein Element zu entfernen, ich habe es Ihnen ermöglichen, ziehen Sie ein Element, um eine "trash" - container.Ich bin schwer Konzeption, wie zu entfernen Sie das Element aus der ausgeblendeten Felder.Ich habe schon abonnieren/Ereignis-code, um die folgenden zwei Funktionen.
Können Sie lassen Sie mich wissen, ob es eine bessere Weise zu tun, die removeGoalFromHiddenFields Funktion?Es kann viele "subgoal" - Elemente.
Ich bin zu Beginn des Tests mit dem, was ich unten, aber ich habe einige Zweifel.
Vielen Dank,
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]);
}
}
}
Auch kann ich das tun diese statt:nodes = document.getElementById("subgoal")
Lösung
Ich vermute, was Sie wollen, hier ist die Funktionalität von dojo.query .
Versuchen Sie so etwas wie:
dojo.query("#form1 input[value=\"" + goalText + "\"]").forEach(function(field) {
field.parentNode.removeChild(field)
});
Andere Tipps
Feld.setAttribute("type","hidden");
Nicht verwenden, setAttribute, die auf HTML-Dokumente.Es gibt viele Fehler auf IE.Verwenden Sie die üblichen DOM-HTML-Eigenschaften, die auch leichter zu Lesen:
field.type= 'hidden';
var pos = node[i].innerHTML.IndexOf(goalText)
Durchsuchen von HTML-markup für eine Wert ist dumm, und wird nicht funktionieren, wenn goalText enthält einen Charakter wie ‘<'oder '&' das HTML zu entkommen.
Für den obigen code, es sieht aus wie nodes[i]
sollte eine der <input>
Elemente, die Sie angehängt gibt, in welchem Fall innerHTML
ist keine gute denn es wird nur nach Inhalten suchen, die den Eingang, die nichts anderes ist, als input ist ein leeres element.Betrachten Sie stattdessen, die value
Eigenschaft Sie es:
var input= nodes[i];
if (input.name=='subgoal' && input.value==goalText)
input.parentNode.removeChild(input);
Auch kann ich das tun diese statt:nodes = document.getElementById("subgoal")
Nein, wie Sie Ihre subgoal-Elemente haben keine IDs.Entweder durch Namen:
var subgoals= form.getElementsByName('subgoal');
(das ist das gleiche wie DOM-0:)
var subgoals= form.elements.subgoal;
oder fügen Sie eine ID für jede subgoal zu helfen, rufen Sie es später:
field.id= 'id-'+goalText;
das obige nicht funktioniert, wieder, wenn Sie haben spezielle Charaktere in goalText.
Alternativ behalten Sie Ihre eigenen Suche in JavaScript, anstatt alles in den DOM:
var subgoalfields= {};
...
// on add
subgoalfields[goalText]= field;
...
// on remove
subgoalfields[goalText].parentNode.removeChild(subgoalfields[goalText]);
delete subgoalfields[goalText];