2011-10-05 1 views
0

Хорошо. У меня есть моя настройка html.jquery поиск элемента один элемент над

<div id="wrap"> 
    <div class="left"></div> 
    <div class="right"> 
     <a href="#">link</a> 
    </div> 
    <div class="listings" style="display:none"> 
     <ul> 
     <li>Listing 1</li> 
     <li>Listing 2</li> 
     <li>Listing 3</li> 
     </ul> 
    </div> 
</div> 

То, что я пытаюсь сделать, это когда ссылка на «право» щелкают будет найти списки DIV, а затем показать его, проблема в том, что мне нужно знать высоту контейнера UL перед показу поэтому я могу изменить размер и показать соответственно.

Другая проблема заключается в том, что контент динамически создается, поэтому он может иметь несколько комбинаций слева и справа/списки, отображаемых на странице. Я не обрабатываю ту часть продукта, с которой я только что развиваю интерфейс интерфейса, чтобы работать с вещами. Поэтому я нахожусь в безрассудстве, поскольку я пробовал все, что мог подумать от братьев и сестер, родителям, чтобы найти, может быть, я просто справляюсь с этим неправильно.

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

<div id="wrap"> 
     <div class="left"></div> 
     <div class="right"> 
      <a href="#">link</a> 
     </div> 
     <div class="listings" style="display:none"> 
      <ul> 
      <li>Listing 1</li> 
      <li>Listing 2</li> 
      <li>Listing 3</li> 
      </ul> 
     <div> 
     <div class="left"></div> 
     <div class="right"> 
      <a href="#">link</a> 
     </div> 
     <div class="listings" style="display:none"> 
      <ul> 
      <li>Listing 1</li> 
      <li>Listing 2</li> 
      <li>Listing 3</li> 
      </ul> 
     <div> 
     <div class="left"></div> 
     <div class="right"> 
      <a href="#">link</a> 
     </div> 
     <div class="listings" style="display:none"> 
      <ul> 
      <li>Listing 1</li> 
      <li>Listing 2</li> 
      <li>Listing 3</li> 
      </ul> 
     <div> 
     <div class="left"></div> 
     <div class="right"> 
      <a href="#">link</a> 
     </div> 
     <div class="listings" style="display:none"> 
      <ul> 
      <li>Listing 1</li> 
      <li>Listing 2</li> 
      <li>Listing 3</li> 
      </ul> 
     <div> 
    </div> 

ответ

1

это то, что вы хотите ?:

$(".right a").click(function(e) { 
    $(this) //a-element 
     .parent() // div.right 
      .next() // div.listings 
      .toggle(); //Hide and show depending on what it was 
    e.preventDefault(); 
}); 

вы можете удалить комментарии и писать в одной строке, если вы хотите.

если его динамическое загружены с помощью AJAX или не загружены на DOM вы можете использовать живое событие:

$(".right a").click("click", function(e) { 
    $(this) //a-element 
     .parent() // div.right 
      .next() // div.listings 
      .toggle(); //Hide and show depending on what it was 
    e.preventDefault(); 
}); 
+1

использовать метод 'живой()' из JQuery, чтобы связать событие для всех текущие и будущие элементы dom, соответствующие вашему селектору –

+0

, вопрос только в том, что я могу найти UL внутри него, чтобы получить его высоту()? – chris

+1

После '.toogle()' вы можете добавить '.find (" ul "). Height()' и сохранить его на переменной – voigtan

0

Прежде всего, вы должны держать некоторое отображение ему для скажем сохранить идентификатор для перечисления дивы и и вызывать функция по щелчку ссылки, содержащей идентификатор.

> <div class="left"></div> 
>  <div class="right"> 
>   <a href="#" onclick="someFunction('id1');">link</a> 
>  </div> 
>  <div id="id1" class="listings" style="display:none"> 
>   <ul> 
>    <li>Listing 1</li> 
>    <li>Listing 2</li> 
>    <li>Listing 3</li> 
>   </ul> 
>  <div> 

иначе это будет очень запутанной для вас

+1

Вам не нужен идентификатор, вы можете использовать структуру DOM для поиска соответствующих '.listings' для всех '.right a' – voigtan

+0

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

+1

Я не согласен с тем, как вы ссылаетесь на идентификатор на a-элементе на то, какой идентификатор должен отображаться, потому что вы действительно не хотите использовать встроенные события для элемента, и использование атрибута data-'HTML5 может решить его, но если вы переделываете разметку HTML, вы также должны повторить Javascript. Но это мое личное мнение. Я бы не переделал HTML-разметку. – voigtan

1

Вам просто нужно подняться на один уровень (parent), перейти к следующему элементу (next), и показать его:

$('.right a').click(function() { 
    $(this).parent().next().show(); 
}); 

Демо: http://jsfiddle.net/ambiguous/jRVxe/

Я предполагаю, что вы HTML был немного перепутались, я думаю, что многие из <div> должны были </div>:

<div id="wrap"> 
    <div class="left"></div> 
    <div class="right"> 
     <a href="#">link</a> 
    </div> 
    <div class="listings" style="display:none"> 
     <ul> 
      <li>Listing 1</li> 
      <li>Listing 2</li> 
      <li>Listing 3</li> 
     </ul> 
    </div> 
    <div class="left"></div> 
    <div class="right"> 
     <a href="#">link</a> 
    </div> 
    <div class="listings" style="display:none"> 
     <ul> 
      <li>Listing 1</li> 
      <li>Listing 2</li> 
      <li>Listing 3</li> 
     </ul> 
    </div> 
    <div class="left"></div> 
    <div class="right"> 
     <a href="#">link</a> 
    </div> 
    <div class="listings" style="display:none"> 
     <ul> 
      <li>Listing 1</li> 
      <li>Listing 2</li> 
      <li>Listing 3</li> 
     </ul> 
    </div> 
    <div class="left"></div> 
    <div class="right"> 
     <a href="#">link</a> 
    </div> 
    <div class="listings" style="display:none"> 
     <ul> 
      <li>Listing 1</li> 
      <li>Listing 2</li> 
      <li>Listing 3</li> 
     </ul> 
    </div> 
</div> 

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

  • Нет связанных вопросов^_^