所以我正在尝试组建一个导航栏,我一直在使用PHP,因为我不熟悉Javascript。我想创建一个函数,它将返回我当前页面的文件名,然后适当地应用css类。
php代码
function setNav($section)
{
$curSection = end(explode('/', $_SERVER['SCRIPT_NAME']));
if ($section == $curSection)
{
echo ' class="active" ';
}
}
然后我会在html中初始化它,如下所示
<a href="abc.def" <?php setNav('index.php'); ?> >Home </a>
出于显而易见的原因,我宁愿在JavaScript或Jquery中这样做,但是我在整理函数时遇到了一些麻烦。我看了几个教程,但是他们遗漏了一些东西。
如何仅提取文件名的最后一部分。我见过几个想法,比如:
<script type="text/javascript">
var url = document.location.href;
url = url.substring(0, (url.indexOf("#") == -1) ? url.length : url.indexOf("#"));
url = url.substring(0, (url.indexOf("?") == -1) ? url.length : url.indexOf("?"));
url = url.substring(url.lastIndexOf("/") + 1, url.length);
alert(url);
</script>
但后来我遇到问题2.我也理解子串是如何工作的但我不知道他正在做什么w /第二个参数例如'(url.indexOf(“#”)== -1)? url.length:url.indexOf(“#”)'我搜索了google,w3schools和几个地方的解释,还查看了substring()的高级用法,但没有出现任何问题。任何指导都表示赞赏。
如果说文件是索引,则url看起来像localhost / abc_corp /所以做一个document.URL调用会调出“localhost / abc_corp /”并省略index.php部分。
提前感谢任何帮助。
答案 0 :(得分:0)
要解决问题2,只要字符串中的最后一个字符是/,如果是,则附加一个伪文件名。
但是我同意乔丹的意见 - 为什么你会这样做并不明显。用PHP做这件事是正确的。
答案 1 :(得分:0)
2.如果URL中没有文件名,javascript将不知道有关响应文件名称的任何信息。当localhost / abc_corp /将导致对index.php的调用时,这是服务器端重定向,由服务器设置强制,例如, Apache的DirectoryIndex
答案 2 :(得分:0)
如果您有一个可用的PHP解决方案,我不确定您为什么要将其转换为JavaScript。无论如何,PHP是一个更好的地方。
无论如何,要解释你的JS正在做什么,如果你有这样的URL:
http://www.somedomain.com/的 somepage.php 强>?someparam = 234#123123
它会在“?”之后扔掉任何东西和/或“#”,以及最后一个“/”之前的任何内容,从而保留了我以粗体显示的位。
如果您的网址不包含任何“/”字符,例如,您只有“www.somedomain.com”,那么它将返回整个字符串,它无法为您创建文件名。
如何工作:首先请注意aString.indexOf(param)
如果aSring
不包含param
则返回-1,否则返回第一个实例的索引。因此substring
的第二个参数被设置为两个值中的一个,具体取决于indexOf
找到的内容。以下内容:
var url = document.location.href;
url = url.substring(0, (url.indexOf("#") == -1) ? url.length : url.indexOf("#"));
从完整的URL开始,然后检查是否有“#”字符 - 如果没有,则substring
接受整个字符串(0到url.length
),否则需要字符串,但不包括“#”。然后:
url = url.substring(0, (url.indexOf("?") == -1) ? url.length : url.indexOf("?"));
同样的想法,但是用“?”。如果没有人保留整个字符串,否则保持一切但不包括“?”。然后:
url = url.substring(url.lastIndexOf("/") + 1, url.length);
从最后一个“/”之后的字符中取出所有内容(如果没有,则为第一个字符(“ - 1 + 1”))直到字符串的结尾。
答案 3 :(得分:0)
var url = document.location.href;
url = url.substring(0, (url.indexOf("#") == -1) ? url.length : url.indexOf("#"));
url = url.substring(0, (url.indexOf("?") == -1) ? url.length : url.indexOf("?"));
url = url.substring(url.lastIndexOf("/") + 1, url.length);
alert(url);
所以第一个 url = url.substring(0,(url.indexOf(“#”)== -1)?url.length:url.indexOf(“#”)); 检查是否有一个井号符号,如果有,它将从0的子串到英镑符号的位置,如果没有磅它只是从0到整个长度(即什么都不做)
第二个与问号做同样的事情。
问题二我只能通过解析特殊情况来解决。
答案 4 :(得分:0)
var scriptName = location.href.substring((location.protocol.length + location.hostname.length + 3))。split('?');
答案 5 :(得分:0)
<head>
<title>JSSample</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<body>
<script type="text/javascript">
$(function() {
$.ajax({
url: "https://api.projectoxford.ai/emotion/v1.0/recognize",
beforeSend: function(xhrObj) {
// Request headers
xhrObj.setRequestHeader("Content-Type", "application/json");
xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key", "my-key");
},
type: "POST",
// Request body
data: '{"url": "https://philosophybank.files.wordpress.com/2013/08/happy-people.jpg"}',
})
.done(function(data) {
JSON.stringify(data);
alert(JSON.stringify(data));
//console.log(data);
//alert(data.scores);
})
.fail(function(error) {
console.log(error.getAllResponseHeaders());
alert("fail");
});
});
</script>
针对同一页面在Chrome Inspector中进行了测试:
var schema = document.location.href.substring(0, document.location.href.lastIndexOf(document.domain + '/'));
var scriptName = document.location.href.replace(schema + document.domain, '');