【发布时间】:2012-08-30 21:35:11
【问题描述】:
我正在尝试从 window.location 中提取哈希子字符串值并将它们写入 HTML 以供用户查看,其 URL 语法不允许使用 ? 作为查询字符串分隔符。
所以我正在处理这个简单的页面:
<html>
<input type="button" id="test" value="Test" />
<!-- input buton is here just to test the script -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
<script>
$(function() {
$('#test').click(function() {
window.location = (window.location);
GetURLParameter('source');
});
});
function GetURLParameter(sParam) {
var sPageURL = window.location.hash.substring(1);
var sURLVariables = sPageURL.split('&');
for (var i = 0; i < sURLVariables.length; i++) {
var sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] == sParam) {
alert(sParameterName[1]);
return sParameterName[1];
}
}
}
</script>
</html>
我使用如下所示的 URL 调用页面,这是客户端 window.location:
http://example.com/pagename.html#source=FOO&medium=BAR&campaign=FRED
我想在页面中写入 FOO、BAR、FRED,以便用户看到。
(注意 URL 中没有 ? 作为查询字符串分隔符,只是 #)
...点击输入按钮时,我收到一个成功的警报(如预期的那样),显示来自 URL 的源“FOO”。太好了。
但是如何获取另外两个 SParamaterNames,然后如何将它们作为 HTML 写入页面以供用户查看,而不是返回警报?
更新更新更新(下)
谢谢@sam-baker!! ......很好的答案。我使用了您的第一个示例,但将代码中的前两行更改为 $(window).load(function() { 以便脚本在加载时运行,这是我的意图。
所以,我仍在使用相同的 URL:
http://example.com/pagename.html#source=FOO&medium=BAR&campaign=FRED
但我想将哈希子字符串值插入到硬编码的 HTML 中,如下所示:
<body>
<span class="style1">$need_source_value_here</span><br />
<span class="style1">$need_medium_value_here</span><br />
<span class="style3">$need_campaign_value_here</span><br />
我将通过将 span 或 div 样式硬编码到 HTML 中来单独设置每个值的样式。
更新更新更新
解决方法如下:
使用此 URL 语法在下面的代码示例中点击以下简单页面,它会将子字符串 vars 输出给用户 onload,无论您希望它们在页面上的任何位置。
http://example.com/pagename.html#dyntext=FOO+MAN+CHU&dynterm=BAR+HOPPING&dynimage=FRED+IS+DEAD
<html>
<body>
<span id="dyntext-span" style="font-weight: bold;"></span><br />
<span id="dynterm-span" style="font-style: italic;"></span><br />
<span id="dynimage-span" style="text-decoration: underline;"></span><br />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
<script>
$(document).ready(function() {
var tags = ["dyntext", "dynterm", "dynimage"];
for (var i = 0; i < tags.length; ++i) {
var param = GetURLParameter(tags[i]);
if (param) {
var dyntext = GetURLParameter('dyntext');
var dynterm = GetURLParameter('dynterm');
var dynimage = GetURLParameter('dynimage');
}
}
var elem = document.getElementById("dyntext-span");
var text = document.createTextNode(dyntext);
elem.appendChild(text);
var elem = document.getElementById("dynterm-span");
var text = document.createTextNode(dynterm);
elem.appendChild(text);
var elem = document.getElementById("dynimage-span");
var text = document.createTextNode(dynimage);
elem.appendChild(text);
});
function GetURLParameter(sParam) {
var sPageURL = window.location.hash.substring(1);
var sURLVariables = sPageURL.split('&');
for (var i = 0; i < sURLVariables.length; i++) {
var sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] == sParam) {
return sParameterName[1];
}
}
}
</script>
</body>
</html>
有一些跨浏览器问题,因为 Firefox 不支持 innerText,不想处理跨浏览器回退到 textContent 等,所以只是遍历 DOM 树并创建文本节点,替换 + unicode带空格的字符。希望对你有用!
【问题讨论】:
标签: javascript query-string substring window.location url-parameters