2010-06-14 3 views
0

я ВСЕГДА нашел ответ здесь просто читать нити, но теперь пришло время для моего самого первого потока, потому что я не смог найти вопросы, связанные с: это моя цель код:если заявление, чтобы проверить доступные элементы

<li> 
       <span class="panel"> 
        <a href="…" class="image" rel="group"> 
         <img title="…" src="…" alt="…" width="128" height="96" /> 
        </a> 
        <span class="sizes"> 
         <span class="button"> 
          <a href="#" class="size1" rel="…" title="1">9x13</a> 
         </span> 
         <span class="button"> 
          <a href="#" class="size2" rel="…" title="3">10x15</a> 
         </span> 
         <span class="button"> 
          <a href="#" class="size3" rel="…" title="6">20x30</a> 
         </span> 
        </span> 
       </span> 
       <a href="…" class="image" rel="group"> 
        <span class="added"></span> 
        <img title="…" src="…" alt="…" width="128" height="96" class="thumbnail" /> 
       </a> 
</li> 

я добавить два элемента «Диапазон» через JQuery:

$('.sizes a').click( 
     function (e) { 
      e.preventDefault(); 
      $(this).after("<span class='checked'></span><span class='remove'></span>"); 
     } 
); 

максимальное количество тех х 3 раза в обернутых делах. поэтому я пытаюсь сделать следующее:

$(".remove").live('click', function(){ 
      $(this).hide(); 
      $(this).prev().hide(); // hide checked span 
      if ($(this).parent().parent().children().children().each().hasClass('checked')) 
      { 
       $(this).parent().parent().parent().next().children(".added").hide(); 
      } 
     } 
    ); 

Конечно, мое заявление является дерьмом. Я пробую это своими словами: , если в span (класс = панель) имеется более одного диапазона (класс = удалить), то ничего не должно произойти. , но если есть только один пролет (класс = удалить), оставшийся в промежутке (класс = панель) THEN должен быть скрыт

как я могу это достичь? есть онлайн-демонстрация этого: http://bit.ly/972be4, как вы можете видеть, каждый раз, когда я нажимаю кнопку под изображением, изображение получает маркировку. и я хочу скрыть эту метку (класс = добавлено), когда не выбрана ни одна кнопка

Большое спасибо! наилучшие пожелания от германии

ответ

0

Проверка на

$("span.panel").find("span.remove").length 

или просто

$("span.panel span.remove").length 
0

Вы можете переписать последний бит на следующее:

$('.remove').live('click'), function() { 
    if($(this).parents('.panel').find('.remove').length > 1) 
     return; 
    // there's only 1 - add the rest of the functionality here 
} 

Хотя .parents() и .find() являются дорогостоящими, но если у вас не так много этих элементов, накладные расходы i s ничтожно.

Кроме того, если элементы «Удалить» всегда братья, изменить вторую линию:

if($(this).siblings('.remove').length) 
+0

Не могли бы вы рассказать об экспансивности селекторов jQuery? –

+0

Не уверен, что вы подразумеваете под расширением, но вы всегда можете использовать страницу документов jQuery в качестве ссылки: http://api.jquery.com/category/selectors/ – mway

0

Приведенные выше ответы являются правильными. Но поскольку я видел, что вы не удаляете «span.remove» из DOM, он будет рассчитывать на все случаи после их добавления. Поэтому вы должны проверить их видимость.

if($(this).parent().parent().children().find('.remove:visible').length == 0){ 
    $(this).parent().parent().parent().next().children(".added").hide(); 
} 

будет вашим состоянием. Это скроет эту желтую полосу, когда последний «.remove» будет нажат-спрятан.

Как вы только что спросили, как скрыть этот бар, это просто делает это. Могут быть другие вещи, которые вы должны учитывать, которые могут быть ошибочными, например, «Повторное отображение дополнительной панели в случае, если один выбран снова», логика также кажется сломанной.

Удачи.

+0

WOW, и ребята спасли мой день. две основные идеи мне очень помогли: 1. find ('.remove: visible ') и 2. .length == 0 Это так удивительно легко, но я совершенно не знал об этом. большое спасибо :-) –

+0

Приятно это знать. Но в StackOverflow мы благодарим людей, принимая их ответ. – simplyharsh

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