2016-09-01 10 views
0

私はショップを建てて、別のbodyクラスを3ページに追加しようとしています。カテゴリページexample.com/shop/model-xxxx/さまざまなショップページの「ボディ」にクラスを追加する

3):

1)メインページ:example.com/shop/

2)商品ページこれらは、3ページであるexample.com/shop/?category=xxxx/

ここに私が試したものです:

if (window.location.href.match(new RegExp('/shop/.+'))) { 

    jQuery('body').addClass('shop-item'); 

} else if (window.location.href.match('/shop/')) { 

    jQuery('body').addClass('shop'); 

} else if (window.location.href.match('/shop/?category=')) { 

    jQuery('body').addClass('shop-category'); 

} 

理想的には、/shop/p年齢は、bodyshopのクラスが追加され、/shop/model-xxxx/ページはbodyに追加されたshop-itemクラスを持ち、/shop/?category=xxxx/ページはbodyクラスに追加されます。

最初の2つが機能しますが、カテゴリページはshop-categoryの代わりにshop-itemがクラスとして追加されます。そのルールは最初の行に定義されているためです。


質問:私はshop-categoryクラスは、カテゴリページに追加されていることを確認するにはどうすればよいですか?

+0

あなたの最後のチェック( ' '/ショップ/カテゴリ=?'')最初のチェックを行います。 –

+0

@ mpf82私はそれを試みましたが、カテゴリページはまだ 'shop-category'クラスの代わりに' shop-item'クラスを取得しています。並べ替えられたコードは次のとおりです。https://jsfiddle.net/wzxzcaw4/ – J82

答えて

1

どういうわけか、JSは、あなたが表現の前後に引用符を使用している場合は、エスケープ疑問符を一致させるようにしていません。

これはテストされ、動作します:

function checkUrl(url) { 
 
    if (url.match(/\/shop\/\?category/)) { 
 
    console.log(url, "-> category"); 
 
    } else if (url.match(new RegExp('/shop/.+'))) { 
 
    console.log(url, "-> item"); 
 
    } else if (url.match('/shop/')) { 
 
    console.log(url, "-> shop"); 
 
    } 
 
} 
 

 

 
checkUrl('exmaple.com/shop/'); 
 
checkUrl('exmaple.com/shop/?category=blub'); 
 
checkUrl('exmaple.com/shop/other');

+0

ありがとうございます。 「カテゴリ」を一番上に移動し、その文字をエスケープすると、魅力的に機能しました。 – J82

0

最初のルールでnegative-lookaheadを使用してください。

if (window.location.href.match(new RegExp('/shop/(?!\?category).+'))) { 

    jQuery('body').addClass('shop-item'); 

} else ... 

この中には、URLの2番目の部分がで始まっていないことを確認してください!カテゴリー

関連する問題