【问题标题】:JavaScript - how to parse hash parameters from url? [closed]JavaScript - 如何从 url 解析哈希参数? [关闭]
【发布时间】:2013-04-09 09:38:13
【问题描述】:

如何使用 js 获取 URL 哈希的一部分?

这是我所拥有的:

something.html?il=#/new/product/123

我需要将“123”作为变量...

***没有库,请纯javascript。

有什么想法吗?

【问题讨论】:

  • 虽然如果 URL 实际上看起来像这样,则值在 window.location.hash 中。
  • 有了#,这是 URL hash 的一部分,而不是查询字符串!
  • 正如@MichaelBerkowski 所说,这不是查询字符串。要么你在设计或术语上犯了错误。

标签: javascript


【解决方案1】:

在 JavaScript 中,document.location.search 包含查询参数。您可以使用Regular Expressions 解析出您需要的部分。但是,在您示例的 URL 中,它不是查询字符串,而是在 document.location.hash 中找到的锚点。

【讨论】:

    【解决方案2】:

    您需要哈希,而不是查询字符串。 # 之后的任何内容都称为 url 的哈希值。

    您可以使用 document.location.hash 并解析该字符串

    var id = document.location.hash.split("/"); //convert the hash into an array, splitting with "/"
    id = id.pop(); //pop will get the last item on the array
    

    无论这种方法多么易读和容易,假设您正在搜索的字符串总是数组中的最后一个是不安全的。您可以使用正则表达式来进一步缩小机会

    var hash = document.location.hash,
        re = /\/new\/product\/(d+)/,
        id = hash.match(re);// for some reason this matches both the full string and the number
    id = id.pop(); // so I must do this again
    

    【讨论】:

    • window.locationdocument.location stackoverflow.com/questions/7857878/… 更安全
    • @turibe 在我的示例中,我并没有尝试将位置设置为不同的位置,因此使用文档位置而不是窗口位置(在所有浏览器中读取/写入文件时)甚至更有意义.location 不是)。无论如何,我只是在了解这种差异,所以谢谢您指出,我猜..
    【解决方案3】:

    这里有一些 Javascript 可以帮助你。只需从 getQuerystringNameValue() 函数获取返回值并使用 $("#textboxID").val(returnValue);将其分配给文本框。

    alert("name1" + " = " + getQuerystringNameValue("name1"));
    alert("name2" + " = " + getQuerystringNameValue("name2"));
    alert("name3" + " = " + getQuerystringNameValue("name3"));
    
    
    function getQuerystringNameValue(name)
    {
        // For example... passing a name parameter of "name1" will return a value of "100", etc.
        // page.htm?name1=100&name2=101&name3=102
    
        var winURL = window.location.href;
        var queryStringArray = winURL.split("?");
        var queryStringParamArray = queryStringArray[1].split("&");
        var nameValue = null;
    
        for ( var i=0; i<queryStringParamArray.length; i++ )
        {           
            queryStringNameValueArray = queryStringParamArray[i].split("=");
    
            if ( name == queryStringNameValueArray[0] )
            {
                nameValue = queryStringNameValueArray[1];
            }                       
        }
    
        return nameValue;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-10
      • 2023-03-23
      • 1970-01-01
      • 2012-03-22
      • 2012-05-28
      • 2014-01-19
      • 1970-01-01
      • 2011-05-11
      相关资源
      最近更新 更多