0

URLに応じてスタイルシートを切り替えるスクリプトが機能しています。

サイトはsmartyテンプレートを使用しており、コアファイルやコアCSSを変更したくないため、この方法で行う必要があります。

今、私は個々のページのURLパス名を追加する必要があります。ページが多いほど、これは非現実的です。

たとえば、の代わりに、/ojs/index.php/index/user/register/ojs/index.php/index/user/profile呼びたい/ojs/index.php/index/user/*ので、下のすべてのページ/user/にスタイルシートが適用されます。

これを行うための最良の方法は何ですか?私はいくつかの同様の投稿を見ましたが、正確には私が必要としているものではありません。

var loc = window.location;
var currentURL = loc.pathname;

if (currentURL=='/ojs/index.php/index' || currentURL=='/ojs/' ||  currentURL=='/ojs/index.php/index/about' || currentURL=='/ojs/index.php/index/user/register' || currentURL=='/ojs/index.php/index/user/profile' || currentURL=='/ojs/index.php/index/admin/' || currentURL=='/ojs/index.php/index/admin/auth')

loadjscssfile("/ojs/plugins/themes/main-theme/main-theme.css", "css")
4

1 に答える 1

0

正規表現を使用できます。

// unless you were using loc for something else, there is no need to store it,
// just chain to get the pathname
var currentURL = window.location.pathname,
    // create a regular expression that will match all pages under user
    usersPattern = new RegExp('^/ojs/index\.php/index/user/.*');

if (usersPattern.test(currentURL)) {
    loadjscssfile("/ojs/plugins/themes/main-theme/main-theme.css", "css")
}

正規表現の場合はいつもそうであるように、それを正しく行うために何をしているのか注意する必要があります。この式がどのように機能するかについて簡単に説明します。

  • ^/ojs/文字列が、などで始まる場合にのみ一致するように指示します
  • \.真ん中のinはをエスケープし、 inが文字通りのドットで.あることを伝えます.index.php
  • 最後の.はどの文字とも一致します
  • *次のは.、前の文字(この場合は任意の文字)の0個以上のインスタンスに一致します

この正規表現はRegExpコンストラクター関数を使用して作成しましたが、正規表現リテラルを使用して作成することもできます。/通常はリテラルを使用することをお勧めしますが、この場合はコンストラクターを使用しました。これは、引数として文字列を使用するため、パターン内の文字をエスケープする必要がなかったためです。これの代わりに、リテラルでそれを行う場合:

usersPattern = new RegExp('^/ojs/index\.php/index/user/.*');

次のようになります。

usersPattern = /^\/ojs\/index\.php\/index\/user\/.*/;

それらをエスケープする必要がない/ので、もう少し読みやすくなります。

于 2013-03-13T05:33:13.777 に答える