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

时间:2012-09-16 22:25:32

标签: javascript url parameters onclick href

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

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

我想做的是:

  1. 从这个网址收集变量(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. 根据从网址收集的参数动态更改href标记。

  4. 我发现这个代码非常适合改变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 和其他语言做很多事情。最简单的假人方法,你可以提供更好的。

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

2 个答案:

答案 0 :(得分:1)

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

只需用它来完成工作或检查它的来源就可以回答你的问题。

答案 1 :(得分:1)

Javascript&amp; jQuery的

addComment函数的第一行从url获取searchsrtring,这对于(和)是什么?如果没有散列,最多(和没有)散列(#)或结束。

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

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

变为

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

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

temp = ["var1", "1"]

temp的第二个元素未转义(用于解码网址中的特殊字符,如%20到“”(空格))

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

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对象的某些部分。 href属性的初始值是多少?到底应该是什么样的?

初始值可能表示必须如何更改网址。可以使用jquery中的方法.attr('href')访问属性的值(第二个参数将更改该值)。

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

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

<a class="modify" href...

然后使用。访问这些元素 $('.modify')(带点)代替$('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与网址一起发送到服务器。如上所述,PHP可以通过魔术variable $_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。如果有人使用书签(使用旧网址)导航到该网站,则附加按钮也无效。