2010-10-13 5 views
1

Je suis nouveau JQuery si cette question est peut-être une évidence, mais j'ai quelque chose qui ajoute un texte à ce qui est déjà dans une boîte d'entrée:JQuery - trouver un caractère précédent

$('a.blog_category').click(function(){ 

    var current_value = $('#id_category').val(); 

    $('#id_category').val(current_value + ', '+ this.text); 
    return false 
}) 

I'D J'aime ajouter une clause if qui ressemble à:

"S'il y a déjà une virgule à la fin de la ligne, n'ajoutez pas de virgule." "S'il n'y a pas déjà une virgule ET ce n'est pas le premier élément dans le texte d'entrée, ajoutez une virgule."

J'espère que cela a du sens.

Merci pour toute aide préalable.

Répondre

1

pas sûr si jQuery a une fonction d'aide pour cela, mais vous pouvez y parvenir en utilisant Javascript simple avec les éléments suivants:

if (current_value.charAt(current_value.length - 1) != ',') { 
    current_value = current_value + ','; 
} 
+0

ou plutôt, valeur_actuelle + = ''; –

+0

Ceci avec une petite modification pour la clause # 2 me donne ce que je voulais: if (current_value.length! = 0 && current_value.charAt (current_value.length - 1)! = ',') { current_value = valeur actuelle + ',' ; } Merci! P.S: Comment ajouter un saut de ligne dans le commentaire? – MonkeyBoo

+0

@MonkeyBoo ~ re sauts de ligne, je ne sais pas sérieusement. J'ai essayé de comprendre ça moi-même. : D –

1

est ici une fonction mise à jour avec la façon dont j'accomplir cela en utilisant regex.

+0

Je ne sais pas pourquoi vous utilisez regex, ou pourquoi une classe de caractères, au lieu de simplement '/, $ /'. Je pense que "ce n'est pas le premier élément du texte d'entrée" signifie qu'il y a déjà quelque chose dans la boîte. Je ne vois aucune discussion de manipulation spéciale pour une virgule au début. –

+0

Préférence personnelle. J'aime utiliser des classes de caractères dans la mesure du possible. Cependant, je les ai retirés de cette réponse. Et j'essayais juste de faire correspondre ses spécifications le plus près possible. C'est redondant je suppose. Mais c'est pourquoi. – Alex

1

La méthode la plus simple consiste à écrire simplement la logique pour vérifier tout ce que vous avez mentionné. Il pourrait y avoir une façon plus propre avec les sélecteurs, mais je devrais passer plus de temps à y penser. Mais faire quelque chose comme ça devrait fonctionner:

$('a.blog_category').click(function(){ 

    var current_value = $('#id_category').val(); 

    if (current_value.charAt(current_value.length - 1) != "," && current_value.indexOf(",") > -1) 
{ 
    $('#id_category').val(current_value + ', '+ this.text); 
} 
else 
{ 
    $('#id_category').val(current_value + this.text); 
} 
    return false 
}) 

EDIT: Passer au-dessus. Je pense que vous cherchez juste quelque chose comme ça alors peut-être que cela fonctionnera mieux. Aucune logique vraiment nécessaire:

$('a.blog_category').click(function(){ 

    var current_value = $('#id_category').val(); 
    var parts = current_value.split(","); 

    parts.push(this.text); 

if (parts[0] == "") 
    parts.splice(0,1); 

    $('#id_category').val(parts.join(",")); 

    return false 
})​ 
+0

Cela exigera toujours qu'il y ait déjà une virgule ('> -1'), donc vous ne pouvez pas ajouter le premier. –

+0

@Matt Oui j'ai réalisé cela. Mais c'est ce que cela semblait être expliqué dans la question. Mais peu importe, je l'ai juste retravaillé pour être plus propre. – spinon

+0

oui, la question pourrait certainement utiliser quelques éclaircissements. –

0

Essayez:

$('a.blog_category').click(function(){ 

    var current_value = $('#id_category').val(); 

stringArray = current_value.split(","); if(stringArray.length>= 1) { 

//Split the string into an array and check the number of items in array 

if (current_value.charAt(current_value.length)!=","){ 

//Check what the last character in the string is - apply comma if needed 

    $('#id_category').val(current_value 
+ ', '+ this.text); 

} } return false }) 
Questions connexes