2010-03-18 5 views
1

У меня есть два неупорядоченных списков, немного как:Соответствующие классы с JQuery

<ul class="list1"> 
    <li>Item 1</li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
    <li class="current">Item 4</li> 
    <li>Item 5</li> 
</ul> 

<ul class="list2"> 
    <li>Item 1</li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
    <li>Item 4</li> 
    <li>Item 5</li> 
</ul> 

И цель, с JQuery, чтобы определить, какие литий помечается «текущий» класса, а затем добавить класс второй список для соответствующего li. Я просто не могу придумать, как это сделать.

Спасибо.

+2

Что вы имеете в виду с соответствующими? Содержимое ('Пункт 4') или позиция? –

+0

Из комментариев он, кажется, обозначает ** позицию **. –

ответ

7
$('ul.list2 li:nth-child(' + $('ul.list1 li.current').index() + ')').addClass('current'); 

Или вы могли бы сделать его немного меньше неприглядное:

$('ul.list2 li').eq($('ul.list1 li.current').index()).addClass('current'); 

Второй, мне нравится лучше, теперь, когда я получаю, чтобы увидеть их обоих :-) Трюки здесь:

  1. фильтр «eq» позволяет вам выбрать элемент из списка jQuery на основе индекса;
  2. "индекс" функция позволяет найти индекс элемента относительно его братьев и сестер в DOM
+0

Фантастический, спасибо! – Meep3D

-1
$('li.current + li').addClass('yourClass')

редактирования: непонимание вопроса

var index = $.inArray($('li.current')[0],$('li.current').parent().children()); 
$('ul:eq(1) li:eq('+index+')').addClass('selected'); 
+0

Это даже действительный селектор jQuery? И что должно означать '+' -значение в селекторе. И как/почему это должно работать вообще? – jitter

+0

@jitter: http://api.jquery.com/next-adjacent-Selector/ Он действителен, но не выбирает правильные элементы. –

1
// Find the current item in the first list, remember its text 
var textToMatch = $('ul.list1 li.current').text(); 
// Loop through each li in the second list 
$('ul.list2 li').each(function(index, domElement){ 
    var curr = $(domElement); 
    // if the text matchs the first then add our class 
    if(textToMatch == curr.text()){ 
      curr.addClass('NEWCLASS'); 
    } 
}); 

EDIT1: Это ответ на неправильный вопрос, вопрос с тех пор был выяснен. Я оставлю это здесь, поскольку он все еще кажется приятным :)

EDIT2: как и в случае с Flex, это лучший способ добиться того же, что опять-таки не вопрос.

$('.list2 li:contains("' + // Find an li in list2 which contains 
    $('.list1 li.current').text() + '")') // the same text as the as the current li in list1 
    .addClass("NEWCLASS"); // and add our new class to it 
+0

Я предполагал, что мы ищем элементы второго списка с тем же текстом. Другие ответы предполагают, что вы имеете в виду элемент того же индекса во втором списке. –

+0

Извините за неясность - это тот же индекс (необязательно текст) – Meep3D

+1

Это проще сделать с помощью ': contains':' $ ('. List2 li: contains ("' + $ ('li.current'). Text() + '")'). addClass (" whatever ")' –

1

Просто используйте это:

var initialIndex = $('.list1 .current').index(); 
$('.list2 li').eq(initialIndex).addClass('current');