2011-10-26 15 views
0

ナビゲーションバーをまとめようとしています.Javascriptに慣れていないのでPHPを使用しています。現在のページのファイル名を返す関数を作成し、CSSクラスを適切に適用したいと考えています。このPHP関数のJavaScriptに相当する

PHPコード

function setNav($section) 
{ 
    $curSection = end(explode('/', $_SERVER['SCRIPT_NAME'])); 
    if ($section == $curSection) 
    { 
     echo ' class="active" '; 
    } 
} 

そして、私はむしろ、JavaScriptやjQueryのでこれを行うだろうと明白な理由

<a href="abc.def" <?php setNav('index.php'); ?> >Home </a> 

を次のように私は、HTMLでそれを初期化するだろうが、私は」機能をまとめるのにいくつかの問題があります。私はいくつかのチュートリアルを見てきましたが、いくつかのことを除いています。

  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> 
    

    をしかし、私は私がどのようにサブ作品を理解するが、私は彼が例えば第二引数「(URL/wをやっている何見当がつかないまた、問題2に実行します.indexOf( "#")== -1)? url.length:url.indexOf( "#") '私は、google、w3schools、および説明のためのカップルの場所を検索し、substring()の高度な使い方を調べましたが、何も出ませんでした。どんな指導も高く評価されます。

  2. URLがlocalhost/abc_corp /のように見えるので、document.URLを呼び出すと、 "localhost/abc_corp /"が呼び出され、index.phpの部分が除外されます。

何か助けを前もっていただきありがとうございます。

+5

* *実際に、それは明らかではありません。これが静的な機能(ページが要求されたときに属性が設定され、変更されない)であり、既にページでPHPを使用している場合は、PHPのままにしてください。こうすることで、JavaScriptをオフにしているユーザーであっても、すべてのユーザーに機能し、ブラウザ間の互換性については心配する必要はありません(CSS以外)。 –

+0

一般化の言葉をお詫び申し上げます。私は、無負荷のやりとりは、通常、それほどうまくいきません。 – Brodie

答えて

0

PHPのソリューションが動作している場合は、JavaScriptに変換する理由がわかりません。 PHPはとにかくそれを行うための良い場所です。とにかく

、あなたがこのようなURLがある場合は、あなたのJSが何をしているかを説明する:?

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

を、それは「後に何を捨てます? "// "#"、最後の "/"の前にあるものは、私が大胆に入れたちょうどビットを保持しています。

URLに "www.somedomain.com"などの "/"文字が含まれていない場合は、文字列全体が返されます。ファイル名は作成できません。にparamが含まれていない場合、aString.indexOf(param)は-1を返します。そうでない場合は、最初のインスタンスのインデックスを返します。したがって、substringへの2番目の引数は、indexOfの検索結果に応じて2つの値のいずれかに設定されます。次:完全なURLで

var url = document.location.href; 
url = url.substring(0, (url.indexOf("#") == -1) ? url.length : url.indexOf("#")); 

開始、それは「#」の文字があるかどうかをチェック - そこではない場合substringは、文字列全体(url.lengthに0〜)かかり、それ以外の場合は取ります文字列まで "#"は含みません。次に、:

url = url.substring(0, (url.indexOf("?") == -1) ? url.length : url.indexOf("?")); 

"?"と同じアイデアです。 1つもない場合は、文字列全体を保持します。そうでない場合は、すべてを「?」を含めずに保持します。その後:

url = url.substring(url.lastIndexOf("/") + 1, url.length); 

は(何も存在しない場合は、最初の文字(「-1 + 1」)になります)、最後の「/」の後の文字から文字列の最後に至るまで、すべてを取ります。

+0

javascriptでそれを行う方がよいと思った唯一の理由は、私の構造内のコードの量を減らすことです。私は、ドキュメントのすべてのphpタグを持つよりもjsで関数を書く方が良いコーディング慣行だと思っていました.JavaScriptを使用していれば、よりきれいに見えるかもしれません。 – Brodie

0

文字列の最後の文字が/である場合に問題2を解決するには、偽のファイル名を追加します。

しかし、私はヨルダンに同意します - あなたがこれをやる理由は明白ではありません。それをPHPで行うのは正しいことです。

0

2. URLにファイル名が存在しない場合、javascriptは応答を作成したファイルの名前について何も知らないでしょう。 localhost/abc_corp /がindex.phpを呼び出すと、これはサーバサイドのリダイレクトです。 ApacheのDirectoryIndex

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から部分文字列をとります

2番目の数字は疑問符で同じことをします。

問題2私は特殊なケースの解析でしか解決できませんでした。

+0

'document.location.pathname'を再発明したポイントはありません - これは1ライナーです:' document.location.pathname.replace(/.*\//、 '') ' – Stoive

0

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

この同じページに対してクロームインスペクタでテスト
0
var schema = document.location.href.substring(0, document.location.href.lastIndexOf(document.domain + '/')); 
var scriptName = document.location.href.replace(schema + document.domain, ''); 

:「私はむしろ、JavaScriptやjQueryのでこれを行うだろうと明白な理由」

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

schema = "https://" 
document.domain = "stackoverflow.com" 
scriptName = "https://stackoverflow.com/questions/7909686/the-javascript-equivalent-of-this-php-function" 
関連する問題