добавление текста к соответствующим атрибутам элемента в классе в jQuery - PullRequest
0 голосов
/ 30 апреля 2009

Я пытаюсь добавить параметры запроса к ссылкам внутри блоков текста в классе, например

<div class="container">
consectetur <a href="foo.php?q=bar">adipisicing</a>
</div>

где добавляется строка? Q =. Вот моя функция:

function appendRef(container,reftag) {
    var Link = $(container).attr("href");
    var afterLink = reftag; 

        $(container).attr({
            href: (Link + afterLink)
            });
}


appendRef(".container a", "?q=bar");

Однако это преобразует каждую ссылку в div в значения, возвращаемые первым, которое он видит, а не обрабатывает их однозначно. Я также ищу возможность фильтровать функцию на основе части исходного URL. Что-то вроде

if Link.match(/domain/) { //append the param 
}

Ответы [ 4 ]

2 голосов
/ 30 апреля 2009

Как уже указывалось, когда вы устанавливаете переменную Link в начале вашей функции, она принимает значение первого элемента в наборе, возвращаемое вашим селектором. Вам необходимо вычислить ваш href для каждого элемента в наборе перед его обновлением.

Вы можете сделать это либо путем вызова .each и использования .attr внутри замыкания, либо вы можете использовать версию attr, которая принимает обратный вызов и позволяет вам выполнять логику для элемента за элементом ...

$(".container a").attr("href",
    function(idx) { //idx is the index of the element in the set
        return this.href.match(/domain/) ? this.href + afterLink : this.href;
    }
 );
0 голосов
/ 30 апреля 2009

Круто, все. Я построил это, а также изменил его, чтобы, если исходная ссылка уже имела параметр, она удаляла его и заменяла нашей новой.

function appendRef(container, reftag, match) {
$(container).each(function() {

    if ($(this).attr('href').match(match)) {                
        var href = $(this).attr('href');                
        var href = href.replace(/\?.*$/,'');
        var href = (href + reftag);  
        $(this).attr('href', href);        

    }
});
}

appendRef(".container a", "?q=foo", "domain");
0 голосов
/ 30 апреля 2009

Я сам не jQuery, но знаю, что селектор css вернет массив результатов. Решение состоит в том, чтобы просто пройтись по элементам и применить необходимые изменения. Кроме того, если вы хотите ограничить URL-адреса, на которые влияют, я добавил в функцию необязательный атрибут match, чтобы проверить href против.

function appendRef(container,reftag, match) {
        match = match || /.*/
        $(container).each(function() {
           if ($(this).attr('href').match(match)) {
              //do url magic here
           }
        })
}
0 голосов
/ 30 апреля 2009

Да, вы устанавливаете переменную Link в статическое значение (значение первого href).

Вы должны сохранить запрос в переменной, как эта:

var links = $("." + container + " a");

так что links будет массивом, тогда вы можете просмотреть его и добавить текст к его href

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...