2009-07-20 7 views
0

Ich habe zwei Arten von Strings als die IDs der Elemente in meinem HTML-Markup:Wie wird Split (Token) für eine Zeichenfolge aufgerufen, die das Token nicht enthält, ohne einen Fehler zu verursachen?

Termine:

"april-23" 
"march-20" 

und Saison-Name:

"springtime" 
"winter" 

Die Termine haben einen Strich den Monat Trennung und der Tag.

Die Jahreszeiten sind ein einzelnes Wort mit keinen anderen Token.

Ich möchte den Monat oder die Saison zu einer neuen Variablen zugewiesen werden genannt:

time_of_year 

Wenn ich dies tun:

var time_of_year = $(this).attr("id").split('-')[0]; 

Es wird auf die Monate arbeiten, aber wenn ich es anrufen ein Jahreszeitname, der das Token nicht enthält, wird es einen Fehler erzeugen?

Was ist der sichere Weg, dies zu tun?

Antwort

4

Es wird kein Fehler zurückgegeben, es wird jedoch ein Array mit einer Länge von eins zurückgegeben.

var splitty = $(this).attr('id').split('-'); 
if (splitty.length > 1) { 
    time_of_year = splitty[0]; 
} 
else { 
    // do something else magical here 
} 

Hier sind die Dokumente auf split:

Sie so etwas tun könnte.

Aber, wenn Sie immer den ersten Wert wollen und nicht über die andere kümmerten, könnten Sie einfach Ihren ursprünglichen Code w/oa Problem verwenden:

var time_of_year = $(this).attr('id').split('-')[0] 
+0

Die Längenprüfung scheint absolut unnötig. $ (this) .attr ("id"). split ('-') [0] allein ist sicher. –

+0

@Ates Ich dachte darüber nach, aber es schien, als ob der OP etwas anderes machen wollte, wenn der geteilte Charakter nicht da war. Ich werde die Antwort jedoch mit diesem Feedback aktualisieren. – seth

3

Sie können überprüfen, ob das Bindestrichzeichen unter Verwendung mystring.indexOf('-') (die -1 zurückgibt, wenn es nicht vorhanden ist) vorhanden ist. Aber ich bin mir ziemlich sicher, dass wenn Sie eine Zeichenkette auf ein Zeichen aufteilen, das dieses Zeichen nicht enthält, wird nur die ursprüngliche Zeichenkette zurückgegeben.

0

Warum Sie nicht über einen Bindestrich vor hinzufügen um die Spaltung durchzuführen? Du greifst sowieso das erste Element. Was ist der Unterschied, wenn es das erste von zwei oder das erste von drei Elementen ist?

var time_of_year = $ ((dies) .attr ("id") + '- x'). Split ('-') [0];

diese Weise können Sie auf der linken Seite des ersten Bindestrich das Element sind Grabbing, und es wird immer ein erster Bindestrich sein:

"April-23-x" "Frühling-x"

(Beachte, ich habe das nicht getestet und stecke mein Leben nicht auf die Syntax! Aber vielleicht wird es eine frische Idee für dich sein.)

Edit: By the way, denke ich das Beispiel in der Original Post wird sowieso funktionieren. Split sollte eine Liste der Länge 1 zurückgeben, und Sie greifen das [0] 'te Element, das perfekt ist.

+0

Eine Art umgekehrter Art, es zu tun: P – micmcg

+0

Nun, zugegebenermaßen ist der "richtige" Weg, es zu tun, die Dokumentation zu lesen und zu verstehen, wie .split() funktioniert. Aber wer hat dafür manchmal Zeit? Wenn Sie also einen Fehler befürchten, machen Sie eine schnelle prophylaktische Maßnahme und bewegen Sie sich vorwärts. Die Reduzierung der menschlichen Arbeitszeit ist ein gültiges Ziel. Sagen wir, es ist ein High-School-Typ, nicht so kenntnisreich über Sex, auf dem Rücksitz des Autos mit einem Hottie. Er ist besorgt, dass sein Finger das Mädchen schwanger machen könnte. Stoppt er alles und liest die Dokumentation über Sex? naah. du legst ein Kondom auf deinen Finger und gehst weiter. Oder besser noch, du "ahh, f - k it". :) –