Javascript相当于这个PHP函数

时间:2011-10-26 22:26:13

标签: php javascript string function

所以我正在尝试组建一个导航栏,我一直在使用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中这样做,但是我在整理函数时遇到了一些麻烦。我看了几个教程,但是他们遗漏了一些东西。

  1. 如何仅提取文件名的最后一部分。我见过几个想法,比如:

    <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()的高级用法,但没有出现任何问题。任何指导都表示赞赏。

  2. 如果说文件是索引,则url看起来像localhost / abc_corp /所以做一个document.URL调用会调出“localhost / abc_corp /”并省略index.php部分。

  3. 提前感谢任何帮助。

6 个答案:

答案 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, '');