簡體   English   中英

此PHP函數的Javascript等效項

[英]The Javascript equivalent of this PHP function

因此,我試圖將導航欄放在一起,並且由於不熟悉Javascript,所以一直在使用PHP。 我想創建一個函數,該函數將返回當前所在頁面的文件名,然后適當地應用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。我也了解子字符串的工作原理,但是我不知道他在做第二個參數,例如'(url.indexOf(“#”)== -1)嗎? url.length:url.indexOf(“#”)'我在google,w3schools和幾個地方搜索了解釋,還研究了substring()的高級用法,但沒有發現任何問題。 任何指導表示贊賞。

  2. 如果說該文件是索引,則該URL看起來類似於localhost / abc_corp /,因此執行一個document.URL調用將顯示“ localhost / abc_corp /”,並省略了index.php部分。

任何幫助都需要提前感謝。

var scriptName = location.href.substring((location.protocol.length + location.hostname.length + 3))。split('?');

var schema = document.location.href.substring(0, document.location.href.lastIndexOf(document.domain + '/'));
var scriptName = document.location.href.replace(schema + document.domain, '');

在Chrome Inspector中針對同一頁面進行了測試:

// document.location.href = "https://stackoverflow.com/questions/7909686/the-javascript-equivalent-of-this-php-function"

schema = "https://"
document.domain = "stackoverflow.com"
scriptName = "/questions/7909686/the-javascript-equivalent-of-this-php-function"

要解決問題2,即使字符串中的最后一個字符是/,如果是,請附加一個假文件名。

但是我同意約旦的看法-根本不明白為什么要這么做。 用PHP做到這一點是正確的。

2.如果URL中沒有文件名,則javascript將不會對作出響應的文件名稱一無所知。 當localhost / abc_corp /將導致對index.php的調用時,這是服務器端重定向,由服務器設置(例如Apache的DirectoryIndex)強制執行

如果您有可用的PHP解決方案,則不確定為什么要將它轉換為JavaScript。 無論如何,PHP是一個更好的地方。

無論如何,如果您有這樣的網址,請解釋您的JS在做什么:

http://www.somedomain.com/ somepage.php?someparam = 234#123123

它會在“?”之后丟掉任何東西。 和/或“#”,以及最后一個“ /”之前的任何內容,因此只保留了我加粗的部分。

如果您的URL不包含任何“ /”字符,例如,您只有“ www.somedomain.com”,則它將返回整個字符串,因此無法為您創建文件名。

工作原理:首先請注意,如果aSring不包含param ,則aString.indexOf(param)返回-1,否則返回第一個實例的索引。 因此,取決於indexOf找到的內容, substring的第二個參數被設置為兩個值之一。 下列:

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”)到字符串末尾的所有內容。

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到整個長度(即不執行任何操作)

第二個與問號做同樣的事情。

問題二我只能通過解析特殊情況來解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM