2014-01-05 2 views
1

Я пытаюсь добавить разные классы из каждого отдельного якоря в их родительские теги <li>. Общий HTML код выглядит следующим образом:jQuery - Добавление классов из дочерних элементов в родительский

<ul class="list"> 
    <li> 
    <div>Title Text</div> 
    <span class="tag"><a href="#" class="Class1">Class1 Link</a>, <a href="#" class="Class2">Class2 Link</a>, <a href="#" class="Class3">Class3 Link</a></span> 
    </li> 
    <li> 
    <div>Title Text</div> 
    <span class="tag"><a href="#" class="Class4">Class4 Link</a>, <a href="#" class="Class5">Class5 Link</a>, <a href="#" class="Class6">Class6 Link</a></span> 
    </li> 
</ul> 

Ближайшие JQuery сценарии у меня есть работа в определенной степень, но это просто захватывая первый класс якоря он сталкивается, и добавляет его к каждому <li> тегу в неупорядоченном списке.

$(window).load(function() { 
    $('span.tag a').each(function(){ 
     var tagClass = $(this).attr("class"); 
     $('span.tag a').closest('li').addClass(tagClass); 
}); 

Любая помощь в обеспечении правильной работы будет оценена по достоинству.

ответ

0

Вы должны использовать $(this) вместо $('span.tag a'), последний выбрать все a элементы и впоследствии все вместе родительское li элементы. Вы можете также использовать функцию обратного вызова .addClass():

$('ul.list > li').addClass(function() { 
    return $('span.tag a[class]', this).map(function() { 
     return this.className; 
    }).get().join(' '); 
}); 

http://jsfiddle.net/UXSa7/

1

Вы должны использовать this ссылки, чтобы найти правильный родителя для этого экземпляра, а не выбирать их всех еще раз, что приводит к JQuery, чтобы сделать первый a тег родитель li, затем берет имя класса этого элемента.

$(window).load(function() { 
    $('span.tag a').each(function(){ 
     var tagClass = $(this).attr("class"); 
     $(this).closest('li').addClass(tagClass); 
    }); 
}); 

Вы также можете использовать $(function(){ вместо $(window).load(function() {, чтобы сделать этот пробег как только DOM готов, а затем, когда все активы будут загружены.

Смежные вопросы