2016-01-29 2 views
3

Я хочу перекрасить все ссылки в пределах obj массива на странице, если они соответствуют числу в procura.Перерисовывать ссылки на странице, если URL-адрес содержится в массиве

Так, obj = [6849,6850]

И procura определен ниже:

function getLastNumberOfString(str){ 
    var allNumbers = str.replace(/[^0-9]/g, ' ').trim().split(/\s+/); 
    return parseInt(allNumbers[allNumbers.length - 1], 10); 
} 

jQuery(function() { 
    jQuery('a.mod-articles-category-title').each(function() { 
    var $link=jQuery(this); 
    var href=$link.attr('href'); 
    var procura = getLastNumberOfString(href) 

    jQuery.each(obj,function(_,test) { 
     if(test.indexOf(procura)!=-1) { // only works on strings 
     jQuery(this).css({'color':'#45AAA2'}); 
     jQuery(this).delay(1000); 
     jQuery(this).animate({ 
     color:"#CCCCCC" 
     },3000); 
     } 
    }); 
    }); 
}); 

Это возвращает ошибку: Uncaught TypeError: Cannot use 'in' operator to search for 'color' in undefined

Я думаю, что это происходит потому, что this не правильно определены, но как исправить Это?

+0

Если вам нужно анимировать цвет, пожалуйста, включите 'jQuery.UI.js'. –

+0

Спасибо, он уже включен –

ответ

1

Внутри вложенного метода each()this относится к каждому элементу массива. Вместо этого вы хотите, чтобы он ссылался на каждый якорь в коллекции jQuery, возвращенный внешним each().

Сохраните текущий якорь в переменной для использования в вложенном методе each(). Вы уже создали эту переменную, названную $link:

$(function() { 
    $('a.mod-articles-category-title').each(function() { 
    var $link = $(this); 
    var href = $link.attr('href'); 
    var procura = getLastNumberOfString(href); 

    $.each(obj, function(_, test) { 
     if (test.indexOf(procura) != -1) { // only works on strings 
     $link.css({ 
      'color': '#45AAA2' 
     }); 
     $linkdelay(1000); 

     $link.animate({ 
      color: "#CCCCCC" 
     }, 3000); 
     } 
    }); 
    }); 
}); 
+0

Я только что нашел его. Lol, переменная $ link уже делает это! –

+0

Ха, да, вы можете использовать это вместо '$ self'! Ред. –

0

Для выбора ссылки, вы хотите, чтобы проверить jQuery [attribute*=value] Selector. Он позволяет вам выбирать все ссылки с атрибутом, содержащим определенную строку. Вы бы иметь возможность просто написать цикл для создания селекторов, которые выглядят как этот $("[href*='6849']")

obj = [6849,6850] 
obj.forEach(function(code){ 
    var selector = "[href*='" + code + "']"; 
    $(selector).css({'color':'#45AAA2'}); 
    ... etc 
}) 
Смежные вопросы