select.option suchen und löschen

nietaL

NGBler
Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
Hey ho,

ich habe ein Array "staedte" mit Ortsnamen. Ein Selektmenü "ziel" hat unter anderen auch die im Array ausgezeichneten Gebiete als Optionen. Eben die, die auch im Array vorkommen sollen nun geslöscht werden.


[src=javascript]var staedte = ["Berlin", "München", "Frankfurt"];
var op = document.getElementById("ziel").getElementsByTagName("option");

for (var i = 0; i < op.length; i++)
{
if(staedte.indexOf(op.text) > -1)
{
// op löschen
}
}[/src]

Ich kriegs einfach nicht hin, den kommentierten Bereich entsprechend zu schreiben. Hat jemand nen Tip?
 
Moin und tschüss ;)

[src=javascript]for (option in parent.children) {
if (parent[option].value.indexOf(stadt) !== -1) parent.removeChild(parent[option])
][/src]

Irgendwie so?

Oder

[src=javascript]if (staedte.indexOf(option.value) !== -1) then removeThisOption...[/src]

Wenn es gefunden wird, ist es nicht = -1 - alles ander zeigt, das es an Position 0+ gefunden wurde, der Suchstring.
 
Die Anzahl der Elemente eines Arrays kannst Du nicht ändern.
Entweder erstellst Du ein neues Array ohne das entsprechende Element oder Du verzichtest auf Array und nimmst direkt etwas wie List.
 
  • Thread Starter Thread Starter
  • #4
[src=javascript] for (var i = 0; i < op.length; i++)
{
for (op in parent.children) {
if (parent[op].value.indexOf(staedte) !== -1) parent.removeChild(parent[op])
}
}[/src]

Da tut sich nichts oder hab ich dich falsch verstanden?

@Kapitn: Ich will nicht das Array bearbeiten sondern das select-element, indem ich eine option lösche.


Ich dachte zunächst an sowas hier:
[src=javascript] var staedte = ["Berlin", "München", "Frankfurt"];
var op = document.getElementById("ziel").getElementsByTagName("option");

for (var i = 0; i < op.length; i++)
{
if(staedte.indexOf(op.text) > -1)
{
document.versenden.ziel.options[????] = null; // die Option löschen, die den Text op.text besitzt
}
}
[/src]
Ich weiß nur nicht, wie ich die entsprechende Option anspreche. Das Iterations-i kann ich nicht nehmen,
 
Zuletzt bearbeitet:
Ich glaube du hast mich falsch verstanden, bzw. hast nen Dreher drin.

Du kannst es auf zwei Arten machen:
a) Entweder du gehtst für jede Stadt jedes Kind durch, und entfernt bei jedem Durchlauf einer Stadt ein oder mehrere Kinder (unsicher, weil .children sich während der Laufzeit ändert), oder
b) du gehst alle Kinder durch, und schaust ob der Wert in einem Städtenamen vorkommt oder gleicht, in dem du das Array der Städte von Anfang bis Ende durchgehst

Ich "glaube", ne andere sinnvolle Methode gibt es nicht.

Du hast:

a) parent ==> input type="select"
b) parent.children ==> option value="Hamburg", option value="München", option value="Freiburg" usw...
c) das Vergleichsarray ==> ["Freiburg", "Augsburg", "Stralsund", "Bremen", "München", "Hamburg]

Das hier:
array.indexOf("optionValue") geht jedes Element in Vergleichsarray durch, bis es einen Treffer hat.

[kw]for (var childIndex = 0; i < op.children.length; childindex++)[/kw]

brauchst du nicht, du kannst über die Elemente auch so laufen:
[kw]for (var child in op.children)[/kw]

"child" ist hierbei ein Index, der Index [kw]i[/kw] (var i = 0....) in deinem Code.

Um das Element anzusprechen, machst du zum Beispiel:

[kw]elternHTMLNode.children[child][/kw]

Um den Wert zu nehmen
[kw]elternHTMLNode.children[child].value[/kw]

Und um zu vergleichen ob der Wert im Array ist:
[kw]staedte.indexOf(elternHTMLNode.children[child].value) !== -1[/kw]

!== -1 -----> -1 heißt, nicht gefunden. Und Liste/String... indexOf ("wert"), suche "Wert" in Liste oder String, alles was nicht -1 ist, heißt, gefunden an Position/Zeichenindex 0 bis Länge... oder eben -1, wenn der Wert nicht enthalten ist.

Aber versuch mal selbst:
[kw]console.log( ['Hamburg-City', 'München-City', 'München', 'Altona'].indexOf('München') )[/kw]

und

[kw]console.log( ['Hamburg-City', 'München-City', 'Münchene', 'Altona'].indexOf('München') )[/kw]

merkst du den Unterschied? - Ich hab hier "Münchene" geschrieben, das ist != "München", nach dem wir suchen, und danach kommt es auch nicht mit exaktem Treffer.

oder

[kw]console.log ( 'Teststring hier steht TExt'.indexOf('hier') )[/kw]

und

[kw]console.log ( 'Teststring hierEEE steht TExt'.indexOf('hier') )[/kw]

In einem String wird das "hierEEE" trotzdem mit String.indexOf("hier") erkannt, obwohl es "hierEEE" ist, das ist zu beachten.

anders ist es, wenn du
[kw]console.log( 'Teststring' === 'Test' )[/kw]
und
[kw]console.log( 'Teststring' === 'Teststring' )[/kw]

--- [2017-12-30 03:01 CET] Automatisch zusammengeführter Beitrag ---

Wenn du ein Kindelement aus einem ElternHTML-Objekt löschen willst:

[src="javascript]op.removeChild(op.children[child])[/src]

op ist ja ElternHTMLKnoten in dem Fall, bzw. "parent" (in meinem Beispiel).

Wenn du nur ein Element entfernen willst ,ist das
[kw]for (var kindElement in op.children)[/kw]

nicht verkehrt.

Was auch gut ist, ein "break" bei einem Treffer zu setzen, damit die Schleife nicht unnütz über andere Elemente fortlaufend iteriert.
 
Zuletzt bearbeitet:
Zurück
Oben