jQuery: найдите div, содержащий часть URL, и добавьте ID в div - PullRequest
0 голосов
/ 24 октября 2011

В моем коде есть список элементов div, для которых назначен собственный атрибут данных, который называется «data-for».

Что мне нужно сделать, так это найти div с атрибутом data-for, который соответствует части URL.

Например, список div может быть:

<div data-for="north-west"></div>
<div data-for="south-west"></div>
etc

Если URL текущей страницы - http://www.mysite.com/shops/north-west.html, Я хочу найти div с атрибутом данных северо-запада (div data-for = "north-west) и назначить ему идентификатор или класс .

Может кто-нибудь помочь мне с этим? Это должно быть быстро, так как список div довольно длинный.

Заранее спасибо за помощь.

Ответы [ 5 ]

2 голосов
/ 24 октября 2011

Если вас беспокоит производительность, отключите пользовательский атрибут данных (который является самым медленным из возможных селекторов) и используйте вместо этого идентификатор.

//Parse out the name of the HTML page you're on.
var selector = window.location.split('/')[2].replace('.html', '');
//Use it as your selector.
$('#' + selector).addClass('foo');

В противном случае используйте этот селектор:

$('div[data-for="' + selector + '"]').addClass('bar');
2 голосов
/ 24 октября 2011

Вы можете использовать метод фильтра jQuery

Демо 1

loc = location.pathname;

$("div[data-for]").filter(function(index){
    var obj = loc.match(this.getAttribute("data-for"));
    if(obj)
        return obj.length > 0;
    else
        return false;
}).css({color:"red"})

РЕДАКТИРОВАТЬ: или еще лучше

Демо 2

$("div[data-for]").filter(function(index){
    var reg = new RegExp($(this).data("for"))
    return reg.test(location.pathname);
}).css({color:"red"});
1 голос
/ 24 октября 2011
$('div').each(function() {  // probably should use a more narrow selector
    var str = $(this).data('for'); // accesses 'data-for' attribute
    if (window.location.href.indexOf(str))>=0) {
        // match found; do something
    }
});
0 голосов
/ 24 октября 2011

Вы можете получить свой путь и заменить все, кроме имени файла, так что вы получите то, что вам нужно.

<script type="text/javascript">
    $(document).ready(function() {
        var data_for = window.location.pathname.replace(/^.*\/([^/]+).html/, '$1');
        $("div[data-for="+data_for+"]").something();
    });
</script>
0 голосов
/ 24 октября 2011

Плагин Metadata отлично подойдет для этого; например,

<div class="foo {bar: 'north-west'} baz"></div>

<script type="text/javascript">
$(function() {
    $('div').each(function() {
        var meta = $(this).metadata();
        console.log(meta);

        // And then do something with meta...
    });
});
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...