Вот монопространственное JS-решение, которое согласуется с примером JQuery Скотта Эверндена. Я только протестировал его в Firefox, но этого должно быть достаточно для начала.
JavaScript
var MIN_SPACES_BETWEEN_VALS = 3;
function mkOption(left, right, total)
{
var str = left;
var spaces = total - left.length - right.length;
for(x = 0;x < spaces;x++)
str += "\xA0";
var opt = document.createElement("option");
opt.text = str + right;
opt.value = right;
return opt;
}
function populate(selId, vals)
{
var sel = document.getElementById(selId);
var maxLeft = -1;
var maxRight = -1;
for(idx = 0;idx < vals.length;idx++)
{
if(vals[idx][0].length > maxLeft)
maxLeft = vals[idx][0].length;
if(vals[idx][1].length > maxRight)
maxRight = vals[idx][1].length;
}
var total = maxLeft + maxRight + MIN_SPACES_BETWEEN_VALS;
for(idx = 0;idx < vals.length;idx++)
sel.add(mkOption(vals[idx][0], vals[idx][1], total), null);
}
HTML
<html>
<head>
<script src="selectTest.js">
</script>
<style>
select
{
font-family: Courier, mono;
}
</style>
</head>
<body>
<select name="countryCallingCode" id="countryCallingCode">
</select>
<script>
var vals = [["Afghanistan", "+93"], ["Albania", "+355"], ["Algeria", "+213"]];
populate("countryCallingCode", vals);
</script>
</body>
</html>