【问题标题】:Populate attribute value based on variable in URL string根据 URL 字符串中的变量填充属性值
【发布时间】:2012-01-27 18:00:05
【问题描述】:

假设我在我网站上的一个页面上:http://www.example.com/SearchResults.asp?Search=stackoverflow。是否可以使用 JavaScript 或 jQuery 代码从 URL 字符串中获取变量“search”并将其填充到搜索框的值中?

基本上我会有我的常规识别搜索框:

<input type="text" title="Search" id="search_box" />

用户会搜索一些东西,但我需要一个 JavaScript 或 jQuery 代码,当客户在 Search.asp 页面上时,它会从 URL 字符串中的“搜索”变量中获取值并将其添加为“值”到input#search

因此用户将在此页面上:http://www.example.com/SearchResults.asp?Search=stackoverflow,搜索框将如下所示:

<input type="text" title="Search" id="search_box" value="stackoverflow" />

谢谢

【问题讨论】:

    标签: javascript jquery url query-string


    【解决方案1】:

    你可以试试这个功能:

    function getSearchVariable(variable) 
    {
        var query = window.location.search.substring(1);
        var vars = query.split("&");
        for (var i=0;i<vars.length;i++) {
            var pair = vars[i].split("=");
            if(pair[0] == variable){
                return unescape(pair[1]);
            }else{
                return false;
            }
        }
    }
    

    如果您在上面提到的示例中存在此函数,您只需调用 getSearchVariable("Search") 即可返回“stackoverflow”。

    因此,在您的页面中,您将有一个如下所示的脚本元素:

    <script type="text/javascript">
        function getSearchVariable(variable) 
        {
            var query = window.location.search.substring(1);
            var vars = query.split("&");
            for (var i=0;i<vars.length;i++) {
                var pair = vars[i].split("=");
                if(pair[0] == variable){
                    return unescape(pair[1]).split("+").join(" ");
                }else{
                    return "";
                }
            }
        }
    
        $(document).ready(function(){
            $("#search_box").val(getSearchVariable("Search"));
        });
    </script>
    

    希望有帮助!

    【讨论】:

    • 这也是另一个不错的功能:(而且比我的详细一点)css-tricks.com/snippets/javascript/get-url-variables
    • 我意识到我无法编辑这些,因为我对 JavaScript 几乎一无所知。实际的页面和 ID 与我最初发布的不同。搜索输入的ID其实是search_box,页面其实是SearchResults.asp。我要对上面的代码进行哪些更改才能使其对我有用?
    • 哇这个效果很好。一个问题是,当搜索框中没有任何内容时,它会显示为 false。我刚刚将return false; 更改为return ;,它成功了!另一件事是 URL 字符串将空格更改为“+”我怎样才能让脚本将“+”更改回空格。
    • 啊,是的,我把 false 留在那里进行错误检查;如果最好的选择,请将其替换为 return "";。我更新了代码以用空格替换加号。
    • 谢谢,但优点仍在回归。另外,另一个令人烦恼的问题,我怎样才能让它只匹配“搜索”我也有变量“搜索”,当我在这些页面上时,我在搜索框中看到“hing”。
    【解决方案2】:

    您可以使用JQuery URI plugin(您真正无耻地编写)来提取 URL 的任何部分:具体而言,$.uri(window.location.href).at("query").search 为所述 URL 生成“stackoverflow”。

    整个流程是注册一个回调(在页面加载时触发)来分析 URL 并设置该表单元素的值,即:

    <script>
      $(document).ready(function () {  
        $('#Search').val($.uri(window.location.href).at("query").search); 
      })
    </script>
    

    【讨论】:

      【解决方案3】:

      JavaScript

      document.getElementById('Search').value = [(window.location.search.match(/(?:^|[&;])Search=([^&;]+)/) || [])[1]];
      

      jsFiddle.

      [] 包装它意味着如果找不到该值,它将返回一个空字符串而不是undefined(将设置为输入的value 并显示为undefined 字符串) .

      jQuery

      $('#Search').val(function() {
          return (window.location.search.match(/(?:^|[&;])Search=([^&;]+)/) || [])[1];
      });
      

      jsFiddle.

      (/* get GET param */ || []) 是这样,如果找不到 GET 参数,代码不会出错。

      【讨论】:

      • 我不知道为什么它不起作用:$('#search_box').val(function() { return (window.location.searchresults.match(/(?:^|[&amp;;])Search=([^&amp;;]+)/) || [])[1]; }); div 的 id 确实是 search_box,页面的 url 实际上是 searchresults.asp。我相应地修改了代码,但没有奏效。你知道为什么吗?
      • @user 您的代码错误。你为什么把searchresults放在那里?
      猜你喜欢
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      • 2020-11-28
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      • 2019-12-08
      • 2018-05-20
      相关资源
      最近更新 更多