[英]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中執行此操作,但是在將函數組合在一起時遇到了一些麻煩。 我看過一些教程,但它們省略了一些內容。
如何僅提取文件名的最后一部分。 我已經看到了一些類似的想法:
<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()的高級用法,但沒有發現任何問題。 任何指導表示贊賞。
如果說該文件是索引,則該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.