0

根据文档,Selector 'Attribute Starts With' 选择具有指定属性的元素,其值恰好以给定的字符串开头。我想做完全相反的事情 - 我想选择那些指定属性的值位于给定字符串开头的元素。

考虑以下示例:

<a href="/about-us/">About us</a>
<a href="/products/">Products</a>
<a href="/contact/">Contact</a>

当前 URL 是/products/some-catogory/sub-category/product/?x=y&z=x,我想突出显示第二个菜单项。最好的方法是什么?

4

3 回答 3

3

我建议:

var path = document.location.pathname;
$('a').filter(
    function(i,e){
        return $(this).attr('href').indexOf(path) == 0;
    }).addClass('highlight');

JS 小提琴演示

highlight类名适当地定义了突出显示。

这是使用以下 HTML 测试的:

<a href="/about-us/">About us</a>
<a href="/products/">Products</a>
<a href="/_display/">_display</a>
<a href="/contact/">Contact</a>​

请记住,这在 JS Fiddle 上得到了证明,因此它将匹配第三个a元素(因为那是匹配的元素。

编辑以提供更通用的解决方案,您可以在其中匹配给定的目录/子目录:

function directory(path) {
    if (!path) {
        return false;
    }
    else {
        var _tmp = path.split('/'),
            directories = [];
        for (var i = 0, len = _tmp.length; i < len; i++) {
            if (_tmp[i].length > 0 && _tmp[i].indexOf('?') == -1) {
                directories.push(_tmp[i]);
            }
        }
        return directories;
    }
}
// in the real world use:
// var path = document.location.pathname,
var path = '/products/some-catogory/sub-category/product/?x=y&z=x',
    dir = directory('/products/some-catogory/sub-category/product/?x=y&z=x')[0];
$('a').filter(
    function(i, e) {
        return $(this).attr('href').indexOf(dir) == 0 || $(this).attr('href').indexOf('/' + dir) == 0
    }).addClass('highlight');​

JS 小提琴演示

于 2012-11-03T13:49:27.453 回答
0

我不确定您要做什么,但您可以选择第二项:

a:contains("Products")
于 2012-11-03T13:35:31.803 回答
0

您可以:not与“属性开始于”选择器一起使用来实现此目的。

例如: $('a:not([href^="whetever"])')

看这个演示:http: //jsfiddle.net/XH7Ut/

于 2012-11-03T14:18:34.767 回答