2009-12-20 3 views
1

j'ai la baisse suivante dans le menu déroulant:jQuery sélectionner et afficher son contenu filtre de <option>

<select id="target"> 
    <option value="0">Zero ($123.45)</option> 
    <option value="1">One ($99.99)</option> 
    <option value="2">Two ($4.50)</option> 
</select> 

En utilisant jQuery, comment puis-je choisir le contenu des supports d'option sélectionnée (), à savoir 123.45, 99.99 ou 4.50?

Jusqu'à présent, j'ai:

$("select#target option:selected").contents(); 

Cela donne juste Zero ($123.45) ou équivalent bien. Comment puis-je filtrer davantage pour obtenir le nombre que je recherche?

Merci d'avance.

+1

Avec des expressions régulières! Yay! – Skilldrick

Répondre

3

Je pense que la façon la plus idiomatiques de le faire avec jQuery est

$("#target :selected").text().match(/\((.+)\)/).pop() 

Les expressions régulières sont généralement le meilleur moyen de faire correspondre le texte en Javascript, et ce style de code est conforme à la méthode jQuery habituelle chai ning style, n'introduit aucune variable locale superflue et n'inclut pas une opération de déréférencement d'index moche. J'ai aussi écrit le sélecteur sous une forme plus compacte.

4

Essayez:

var a = $("select#target option:selected").contents(); 
var bracketed = a.replace(/\(([^)]*)\)/g, "$1"); 

Ou, si vous ne voulez pas utiliser une expression régulière:

var a = $("select#target option:selected").contents(); 
var bracketed = a.split('(')[1].split(')')[0]; 
4

Vous pouvez aussi utiliser ces valeurs en dollars comme l'attribut de valeur pour chaque:

<option value="$123.45">Zero ($123.45)</option> 
    etc... 

puis utilisez cette jQuery pour l'obtenir:

var a = $('select#target option:selected').attr('value'); 
+0

J'aime cette suggestion. L'analyse du texte fonctionne, mais semble un peu moins flexible en cas de changement (à moins de tester les variations avec votre regex). Je suggère probablement d'utiliser une classe de prixXXXXX-XX et d'analyser cela, car la classe peut être définie plus précisément et ne serait probablement pas modifiée autant que le texte le serait. –

Questions connexes