2009-07-20 7 views
0

j'ai deux types de chaînes que les ID des éléments dans mon balisage HTML:Comment appeler split (token) sur une chaîne qui ne contient pas le token sans provoquer d'erreur?

Dates:

"april-23" 
"march-20" 

et noms de la saison:

"springtime" 
"winter" 

Les dates ont un tableau de bord séparant le mois et la journée.

Les saisons sont un seul mot sans autres jetons.

Je veux attribuer le mois ou la saison à une nouvelle variable appelée:

time_of_year 

Si je fais ceci:

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

Il travaillera sur les mois, mais si je l'appelle sur un nom de saison qui ne contient pas le jeton, va-t-il générer une erreur?

Quel est le moyen sûr de le faire?

Répondre

4

Il ne renvoie pas d'erreur mais renvoie un tableau d'une longueur de un.

Vous pouvez faire quelque chose comme ceci:

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

Voici les docs sur split.

Mais, si vous voulez toujours la première valeur et ne se soucient pas des autres, vous pouvez simplement utiliser votre code d'origine w/problème oa:

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

Le contrôle de longueur semble absolument inutile. $ (this) .attr ("id"). split ('-') [0] seul est sûr. –

+0

@Ates Je pensais à ça mais il semblait que l'OP voulait faire quelque chose de différent si le personnage séparé n'était pas là. Je vais mettre à jour la réponse avec ce commentaire. – seth

3

Vous pouvez vérifier si le trait d'union existe en utilisant mystring.indexOf('-') (qui retournera -1 s'il n'existe pas). Mais je suis à peu près sûr que si vous divisez une chaîne sur un caractère qui ne contient pas ce caractère, il retournera simplement la chaîne d'origine.

0

Pourquoi vous pas ajouter un trait d'union avant à effectuer la scission? Vous saisissez le premier élément de toute façon. Quelle est la différence si c'est le premier des deux ou le premier des trois éléments? Var time_of_year = $ ((this) .attr ("id") + '- x'). Split ('-') [0];

De cette façon, vous saisir l'élément à la gauche du premier tiret, et il y aura toujours un premier trait d'union:

« avril-23-x » « printemps-x »

(Remarque, je n'ai pas testé cela, et je ne mets pas ma vie sur la syntaxe! Mais peut-être que ce sera une nouvelle idée pour vous.)

Edit: En passant, je pense que l'exemple dans le message original fonctionnera quand même. Split devrait renvoyer une liste de longueur 1, et vous saisissez l'élément [0] 'th, ce qui est parfait.

+0

Sorte de manière de cul arrière: P – micmcg

+0

bien, certes, le "bon" moyen de le faire est de lire la documentation et de comprendre comment fonctionne .split(). Mais qui a le temps pour ça, parfois. Donc, si vous vous inquiétez d'une erreur, prenez une mesure prophylactique rapide et avancez. Réduire le temps de travail humain est un objectif valable. Dites qu'il y a un gars de lycée, pas si bien informé sur le sexe, sur le siège arrière de la voiture avec une bombasse. Il craint que son doigt ne mette la fille enceinte. Est-ce qu'il arrête tout et lit la documentation sur le sexe? naaah. vous mettez un préservatif sur votre doigt et continuez. Ou mieux encore, vous "ahh, f - k it". :) –

Questions connexes