【问题标题】:Getting all links on a page that match a url string获取页面上与 url 字符串匹配的所有链接
【发布时间】:2011-06-08 03:18:54
【问题描述】:

我目前正在使用此代码(连同 Mootools)来构建包含特定 url 字符串的 #subnav div 中所有锚点的数组:

$('subnav').getElements('a[href*=/'+href+']')

问题是如果我正在寻找work.aspx?subsection=24&project=1,它将匹配具有work.aspx?subsection=24&project=15 的URL 的锚。

我怎样才能防止这种情况发生?

【问题讨论】:

  • 你能澄清一下你想在这里“包含”的意思吗? href 值“包含”您正在搜索的 URL 字符串(URL 的片段?不清楚)究竟意味着什么?
  • console.log(document.getElements("a[href$=work.aspx?subsection=24&project=1]")); - 结束,不包含不会拾取 project=15 的内容。

标签: javascript mootools string-matching


【解决方案1】:

我能想到的唯一解决方案是使用正则表达式;像这样:

$('subnav').getElements('a').filter(function (element, index) {
    return /work\.aspx\?subsection=24&project=1(?:$|&)/.test(element.href);
});

该正则表达式将匹配 project=1,然后是 & 或字符串的结尾。它使用 MooTool(或本机浏览器的)Array.filter 删除所有不匹配项。这不是最优雅的解决方案,尤其是如果您动态使用它,那么您必须编写一些代码来创建新的正则表达式。

【讨论】:

  • 这也是一个非常昂贵的操作:)
  • 同意,但这是我唯一能想到的解决问题的方法。
  • 嗯。是的,我买不起贵的。该网站在 JS 中已经非常繁重了。
【解决方案2】:

要回答我自己的问题。就像将 * 更改为 $ 一样简单。

$('subnav').getElements('a[href$=/'+href+']')

【讨论】:

  • 可能是因为Going to answer my own question. 大约 8 小时前 same 答案已作为评论发布。
【解决方案3】:

这样的声音应该通过 301 或 302 重定向更优雅地处理...

【讨论】:

  • 不知道为什么。我不想重定向任何人。
  • 但这不正是您通过 Javascript 更改 URL 所做的吗? Google 最终仍将遵循 ...&project=1。也许我只是不够彻底地理解你的问题......
  • 我没有更改任何 URL。我正在寻找与当前页面的 url 匹配的锚点,并向这些锚点添加一个“here”类。我通常会在服务器端做这个,但这个网站是完整的 ajax。
猜你喜欢
  • 2021-02-03
  • 2011-01-15
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
相关资源
最近更新 更多