如何从URL收集变量,将它们插入到数组中并动态更改href URL?
我不是开发人员,所以请在这里轻松点我!我熟悉HTML并且不擅长从各种来源获取代码片段并将它们拼凑在一起。这是我第一次决定在这样的博客上寻求帮助,因为我一直在环顾四周,似乎无法找到我需要的东西。非常接近但到目前为止..请帮助!
我想做的是:
从这个网址收集变量(wwww.myurl.com/index.html?var1=1&var2=2&var3=3
等等。)
获取这些变量并将它们插入到数组中,同时剥离不需要的部分。我发现这个代码可以获取它但是将它打印在屏幕上,我不需要......
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>
根据从网址收集的参数动态更改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 和其他语言做很多事情。最简单的假人方法,你可以提供更好的。
我确定这对你来说就像小学一样,但我似乎无法弄清楚,所以你的建议非常感谢!
答案 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) ?>
这种方法的优点是: