2

如何从 URL 收集变量,将它们插入数组并动态更改 href URL?

我不是开发人员,所以请在这里放轻松!我熟悉 HTML,并且不擅长从各种来源获取代码片段并将它们拼凑在一起。这是我第一次决定在这样的博客上寻求帮助,因为我一直在环顾四周,但似乎找不到我真正需要的东西。非常接近,但到目前为止..请帮助!

我想做的是:

  1. 像这样从 URL 收集变量(wwww.myurl.com/index.html?var1=1&var2=2&var3=3等等等等)

  2. 取出这些变量并将它们插入到数组中,同时去掉不需要的部分。我找到了这段代码,它得到了它,但将它打印在屏幕上,我不需要..

    myurl.com/index.html?log=1&pass=2
    

    function addComment()
    {
        var parameters = location.search.substring(1).split("&");
    
        var temp = parameters[0].split("=");
        l = unescape(temp[1]);
    
        temp = parameters[1].split("=");
        c = unescape(temp[1]);
    
        document.getElementById("log").innerHTML = l;
        document.getElementById("pass").innerHTML = c;
    }
    addComment();
    
    
    <p>http://www.myurl.com/</b><span id="log" ></span></p>
    <p>http://www.myurl.com/</b><span id="pass"></span></p>
    
    </script>
    
  3. 根据从 URL 收集的参数动态更改 href 标记。

我发现这段代码可以很好地更改 URL,但是 (a) 变量是从输入表单中收集的,我需要能够从 URL 中获取它们。(b) 我还需要其中几个(可能是 20 个),所以需要一个数组。

<input type="text" id="mySearchBox" />
<a href="http://www.myurl.com/index.html?" onclick="this.href+=+document.getElementById('mySearchBox').value">Enter Parameter</a>

(编辑代码格式)


关于技术...我不拘泥于任何特定的语言或方法,但 javascript 和 jquery 对我来说似乎是最简单的。我对PHP和其他语言做得不多。您可以提供更好的傻瓜最简单的方法。

我敢肯定这对你来说就像小学的东西,但我似乎无法弄清楚,所以非常感谢你的建议!

4

2 回答 2

1

用于读取和修改查询字符串的出色 jQuery 插件:http: //archive.plugins.jquery.com/project/query-object

只需使用它来完成工作或检查它的来源以获得您问题的答案。

于 2012-09-16T22:35:34.600 回答
1

Javascript 和 jQuery

addComment 函数的第一行从 url 获取 searchsrtstring,这一切都来自(和)?直到(和没有)散列(#)或结尾(如果没有散列)。

之后,第一个字符 (?) 用 . 删除substr(1)。最后,字符串在每个“&”处用.split("&"). 所有拆分的部分都存储在一个数组中。将其应用于示例:

www.myurl.com/index.html?var1=1&var2=2&var3=3

变成

["var1=1", "var2=2", "var3=3"]

这个数组存储在变量参数中。接下来,数组的第一个元素在“=”字符处拆分。我们得到

temp = ["var1", "1"]

temp 的第二个元素未转义(用于将 %20 等 url 中的特殊字符解码为 " " (空格))

要创建一个对象,首先创建一个空对象,然后像这样填充它:

var obj = {};

obj[ temp[0] ] = temp[1];

在 for 循环中使用参数中的所有元素执行此操作将使您:

obj = { var1 : 1, var2 : 2, var3 : 3 }

你想要的对象。这是一个非常简单的解析器,对于更复杂的值可能无法正常工作。这是上面描述的完整代码:

function getUrlObj() {
  var parameters = location.search.substring(1).split("&");
  var obj = {};
  for( var i = 0; i < parameters.length; ++i) {
    var tmp = parameters[i].split("=");
    obj[ tmp[0] ] = unescape( tmp[1] );
  }
  return obj
}

现在到链接:

在您的示例中,链接的 onclick 事件决定了加载哪个 url。像这样,浏览器的状态栏不会显示正确的目的地,这更难以调试且用户友好性较差。另一种方法(使用 jQuery)是收集页面中的所有链接并根据 url 更改它们的 href 标签。这可以在页面(或更好的 DOM)加载后完成。一个 jquery 示例可能如下所示:

$( function() { //called when dom is ready
  //get url object
  var urlObj = getUrlObj();
  //find all <a> elements on page
  // iterate over elements
  $('a').each(function() {
    // change attribute href
    $(this).attr('href', 'new url goes here');
  });
});

我猜你想在新的 url 中插入 url 对象的某些部分。href 属性的初始值是多少?它到底应该是什么样子?

初始值可以指示必须如何更改 url。可以使用.attr('href')jquery 中的方法访问属性的值(第二个参数会更改值)。

该方法(和其他)的详细说明.attr()可以在 jquery 文档中找到:http: //api.jquery.com/attr/

如果您不想更改所有链接元素,则可以将类应用于要修改的链接,例如:

<a class="modify" href...

然后使用 $('.modify')(with dot) 而不是. 访问这些元素$('a')

PHP

如果你想用 php 来做,代码可能会简单得多,因为 php 可以本地处理 url 查询字符串。例子:

<a href="<?php echo $_GET["var1"]; ?>.php">link</a>

将导致您的示例链接到“1.php”。

更新:(根据评论中的讨论)

搜索查询?iframe1=1&banner1=1&button1=1&button2=2&button3=3与 url 一起发送到服务器。如上所述, PHP 可以通过魔术变量$_GET直接访问搜索查询的值。$_GET['button1'] 将为 1。

要使用该变量,文件结尾必须是 .php,以便服务器知道必须评估文件的内容。生成的文件将是一个普通的 html 文件(以 php 结尾)。

写作<?php表示以下文字最多?>为php代码。echo "something";将字符串打印something到生成的 html 文件中。将某些内容打印到文档的快捷方式是<?="text" ?>. 可以打印变量而不是字符串:<?=$somevar ?>.

将此应用于示例,html 文件必须更新如下内容:

<a target="theiframe" href="www.mysite.com/redirect2external?<?=$_GET['button1'] ?>">a link</a>
<a target="theiframe" href="www.mysite.com/redirect2external?<?=$_GET['button2'] ?>">another link</a>

等等。iframe(或横幅)相同:

<iframe name="theiframe" src="www.mysite.com/redirect2external?<?=$_GET['iframe1'] ?>"/>

将所有 html 文件组合到一个 php 文件中的另一种(更好的)方法是使用代表页面的数字或字符串。例如?page=somepage(尽量避免特殊字符和空格,它们可能无法正常工作)。

在 php 文件中,所有页面都会有一个开关:

<?php if( $_GET['page'] == "somepage" ) { ?>
  <a target="theiframe" href="www.mysite.com/redirect2external?1">a link</a>
  <a target="theiframe" href="www.mysite.com/redirect2external?2">another link</a>
<?php } elseif( $_GET['page'] == "someotherpage" ) { ?>
  <a target="theiframe" href="www.mysite.com/redirect2external?3">a link</a>
  <a target="theiframe" href="www.mysite.com/redirect2external?4">another link</a>
<?php } //and so on (btw this is a php comment) ?>

这种方法的优点是:

  1. 较短的网址
  2. 在第一种方法中,如果稍后添加了新按钮,则必须更改指向该页面的所有链接,在 url 中添加 buttonx=x。如果有人使用书签(带有旧网址)导航到该站点,附加按钮也将不起作用。
于 2012-09-17T08:09:29.700 回答