0

ドキュメンテーションによると、セレクター 'Attribute Starts With' は、特定の string で始まる値を持つ指定された属性を持つ要素を選択します。私は正反対のことをしたいと思います -指定された属性の値が指定された文字列の先頭にある要素を選択したいと思います。

次の例を検討してください。

<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、2 番目のメニュー項目を強調表示したいです。それを行う最良の方法は何ですか?

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 で証明されているため、3 番目の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

:notこれを実現するために、「属性開始」セレクターと一緒に使用できます。

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

このデモを参照してください:http: //jsfiddle.net/XH7Ut/

于 2012-11-03T14:18:34.767 に答える