通过jQuery根据位置动态重新排列国家下拉列表?

Posted

技术标签:

【中文标题】通过jQuery根据位置动态重新排列国家下拉列表?【英文标题】:Dynamically rearrange country drop down based on location via jQuery? 【发布时间】:2011-06-28 22:18:37 【问题描述】:

我有一个包含国家和国家代码的下拉菜单。这个列表非常大,所以我想在页面加载后动态地将访问者的国家放在顶部。有没有办法在 jQuery(GeoIP?)中做到这一点?

我的下拉菜单如下所示:

<select name="country" id="country" class="inputCombo">
    <option value="">Select an item...</option>
    <option value="AF">Afghanistan</option>
    <option value="AL">Albania</option>
    <option value="DZ">Algeria</option>
    ....
    <option value="GB">United Kingdom</option>
    <option value="US">United States</option>
</select>

如果你在美国,那么我希望它像这样重新排列:

<select name="country" id="country" class="inputCombo">
    <option value="US">United States</option>
    <option value="">--------------</option>
    <option value="AF">Afghanistan</option>
    <option value="AL">Albania</option>
    <option value="DZ">Algeria</option>
    ....
    <option value="GB">United Kingdom</option>
</select>

或者如果在加拿大,像这样:

 <select name="country" id="country" class="inputCombo">
        <option value="CA">Canada</option>
        <option value="">--------------</option>
        <option value="AF">Afghanistan</option>
        <option value="AL">Albania</option>
        <option value="DZ">Algeria</option>
        ....
        <option value="GB">United Kingdom</option>
        <option value="US">United States</option>
    </select>

对此有何建议或技巧?

【问题讨论】:

您使用哪种服务器端语言?您可能可以在服务器端进行。 【参考方案1】:

下面的代码基本上做了以下事情:

    调用支持jsonp的定位api(即???) 成功后,找到具有匹配值的选项元素 通过预先选择将其移至顶部 将“空白”选项的文本更改为“----”

我不知道所使用的定位服务是否准确,也不知道它的使用政策是什么。您还应该将值缓存一段时间以防止过多的 api 调用。此外,此代码不会检查它是否可以找到具有匹配国家代码的选项。您应该在重写“空白”选项之前检查一下(或忘记重写它)

http://jsfiddle.net/rob_cowie/uZLNM/ 的工作示例

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title></title>
</head>

<body>
  <div id="container">
    <select name="country" id="country" class="inputCombo">
        <option value="">Select an item...</option>
        <option value="AF">Afghanistan</option>
        <option value="AL">Albania</option>
        <option value="DZ">Algeria</option>
        <option value="GB">United Kingdom</option>
        <option value="US">United States</option>
    </select>
  </div>

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
  <script>
    var url = 'http://www.geoplugin.net/json.gp?jsoncallback=?';

    $(document).ready(function() 
        $.getJSON(url)
            .success(function(data)
                var country_code = data.geoplugin_countryCode;
                var $country = $('#country');
                $country.find('option[value="'+country_code+'"]').prependTo($country);
                $country.find('option[value=""]').text('--------------');
                $country.val(country_code);
            );
    );
  </script>

</body>
</html> 

【讨论】:

以上是关于通过jQuery根据位置动态重新排列国家下拉列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jquery 选择的下拉列表中按字母顺序重新排序 <options>

使用jquery的ajax方法获取下拉列表值

如何在 woocommerce 商店的下拉列表中获取并自动显示访问者的地理位置数据(国家/地区)

使用JS动态创建国家下拉列表[重复]

jQuery动态加载select下拉列表

如何使用 jquery json 获取多个下拉列表