我正在建立一个商店并尝试将不同的body
类添加到三个页面。这是三页:
1)主页:example.com/shop/
2)项目页面:example.com/shop/model-xxxx/
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/
页面会将shop
类添加到body
,/shop/model-xxxx/
页面会添加shop-item
类body
和/shop/?category=xxxx/
页面会将shop-category
类添加到body
。
前两个工作,但类别页面将shop-item
添加为类而不是shop-category
,因为该规则在第一行中定义。
问题:如何确保将shop-category
类添加到类别页面?
答案 0 :(得分: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');

答案 1 :(得分:0)
在第一条规则中使用negative-lookahead。
if (window.location.href.match(new RegExp('/shop/(?!\?category).+')) ) {
jQuery('body').addClass('shop-item');
} else ...
同时确保您的第二部分网址不以?category
开头