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) ?>
这种方法的优点是:
- 较短的网址
- 在第一种方法中,如果稍后添加了新按钮,则必须更改指向该页面的所有链接,在 url 中添加 buttonx=x。如果有人使用书签(带有旧网址)导航到该站点,附加按钮也将不起作用。