2

我有一个带有国家呼叫代码的选择 html 标记。

<select name="countryCallingCode" id="countryCallingCode">
    <option value="1"><span class="name">Afghanistan</span><span class="code">+93</span></option>
    <option value="2"><span class="name">Albania</span><span class="code">+355</span></option>
    <option value="3"><span class="name">Algeria</span><span class="code">+213</span></option>
</select>

我希望名称左对齐,代码右对齐。演示文稿应如下所示:

Afghanistan                +93   
Albania                   +355   
Algeria                   +213

我已经介绍了 span 元素来使用 CSS 实现这一点。

select#countryCallingCode span.name {text-align: left;}
select#countryCallingCode span.code {text-align: right;}

上面的代码,不起作用。此外,span 元素在 XHTML 1.0 strict 的 html 选项标签中似乎无效。

任何想法?

4

5 回答 5

7

我曾经遇到过这个问题,我所做的是将文本格式化为等宽字体,并在中间填充空格以分隔文本并使每一行的字符数为偶数。

于 2009-01-27T17:48:06.843 回答
0

尝试这样的事情

select {width:100px;}
.name  {float:left;}
.code  {float:right;}
于 2009-01-27T17:48:35.580 回答
0

用javascript修改选择框:

找到最长的国家名称,然后修改每个选项,使国家名称和呼叫代码之间有足够的空格。

于 2009-01-27T17:55:17.610 回答
0

Mono-spacing 是正确的答案,但是....您可以使用一些 jQuery 重复测量隐藏跨度中的文本字符串非常接近(不完美)。

var list = [ ["Afghanistan","+93"], ["Albania","+355"], ["Algeria","+213"] ] ;
var max = 0;
for (n = 0; n < list.length; n++)
{
    var s = list[n][0] + "..." + list[n][1]; 
    $('#dummy').html(s);
    var x = $('#dummy')[0].offsetWidth;
    list[n].push(x);
    if (max < x) max = x;
}

for (n = 0; n < list.length; n++)
{
    var fill = max - list[n][2];
    var s = "...";
    while (true)
    {
        $('#dummy').html(s);
        var x = $('#dummy')[0].offsetWidth;
        if (fill <= x) break;
        s += ".";
    }
    var html = list[n][0] + s + list[n][1];
    $('#countryCallingCode').append($('<option></option').val(n+1).html(html));     
}
于 2009-01-27T18:55:24.307 回答
0

这是一个与 Scott Evernden 的 JQuery 示例一起使用的单空间 JS 解决方案。我只在 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>
于 2009-01-27T19:04:41.790 回答