#jquery
#jquery
Вопрос:
У меня есть несколько контейнеров (li). Внутри есть ссылки. При нажатии им нужно открыть соответствующий div (и скрыть несоответствующие div).
Я могу перебирать разделы, но не могу их открыть или скрыть.
Codepen:https://codepen.io/warddem/pen/kkzrPx
<ul>
<li>
<h3>Market study</h3>
<div>
<a href="#" data-toggle="#div1" class="showSingle">Results</a>
<a href="#" data-toggle="#div2" class="showSingle">Learned</a>
<a href="#" data-toggle="#div3" class="showSingle">Deliverables</a>
<a href="#" data-toggle="#close" class="">Close all</a>
<div id="div1" class="optionDiv">Results: </div>
<div id="div2" class="optionDiv">Learned: </div>
<div id="div3" class="optionDiv">Deliverables: </div>
</div>
</li>
<li>
<h3>Competitive research</h3>
<div>
<a href="#" data-toggle="#div1" class="showSingle">Results</a>
<a href="#" data-toggle="#div2" class="showSingle">Learned</a>
<a href="#" data-toggle="#div3" class="showSingle">Deliverables</a>
<a href="#" data-toggle="#close" class="">Close all</a>
<div id="div1" class="optionDiv">Results: </div>
<div id="div2" class="optionDiv">Learned: </div>
<div id="div3" class="optionDiv">Deliverables: </div>
</div>
</li>
</ul>
jQuery('.showSingle').click(function() {
var idOpen = $(this).siblings("div");
var myIndex = $(this).index();
if (idOpen.is("div")) {
// HIDE ALL DIVS IN PARENT
var divLength = idOpen.get(myIndex).id.length;
for (var i = 0, l = divLength; i < l; i ) {
console.log('divs to hide', idOpen[i]);
//HIDE DOESN'T WORK
//idOpen[i].hide();
}
// HOW TO SHOW LINKED DIV ???
console.log('div id to open: ', idOpen.get(myIndex).id);
}
})
Комментарии:
1. Идентификаторы должны быть уникальными.
Ответ №1:
Начните с создания уникального идентификатора. (Хотя это, похоже, не имеет отношения к возникшей у вас проблеме.)
.get()
возвращает элемент как element. функции jQuery не привязаны к ним. .eq()
возвращает элемент как часть нового объекта jQuery.
<ul>
<li>
<h3>Market study</h3>
<div>
<a href="#" data-toggle="#div1a" class="showSingle">Results</a>
<a href="#" data-toggle="#div2a" class="showSingle">Learned</a>
<a href="#" data-toggle="#div3a" class="showSingle">Deliverables</a>
<a href="#" data-toggle="#close" class="">Close all</a>
<div id="div1a" class="optionDiv">Results: </div>
<div id="div2a" class="optionDiv">Learned: </div>
<div id="div3a" class="optionDiv">Deliverables: </div>
</div>
</li>
<li>
<h3>Competitive research</h3>
<div>
<a href="#" data-toggle="#div1b" class="showSingle">Results</a>
<a href="#" data-toggle="#div2b" class="showSingle">Learned</a>
<a href="#" data-toggle="#div3b" class="showSingle">Deliverables</a>
<a href="#" data-toggle="#close" class="">Close all</a>
<div id="div1b" class="optionDiv">Results: </div>
<div id="div2b" class="optionDiv">Learned: </div>
<div id="div3b" class="optionDiv">Deliverables: </div>
</div>
</li>
</ul>
jQuery('.showSingle').click(function() {
var idOpen = $(this).siblings("div");
var myIndex = $(this).index();
if (idOpen.is("div")) {
// HIDE ALL DIVS IN PARENT
var divLength = idOpen.get(myIndex).id.length;
for (var i = 0, l = divLength; i < l; i ) {
console.log('divs to hide', idOpen[i]);
//HIDE DOESN'T WORK
idOpen.eq(i).hide();
}
// HOW TO SHOW LINKED DIV ???
idOpen.eq(myIndex).show();
console.log('div id to open: ', idOpen.get(myIndex));
}
});
Комментарии:
1. 1 для перехода с индексом
a
элементов… но нет необходимости делать это для цикла …. вот краткая версия codepen.io/anon/pen/RGEArL2. @DaniP Да, определенно есть более понятные способы делать такого рода вещи. Я пошел на минимальные изменения в исходном коде, чтобы не путать вещи.
3. Работает идеально, спасибо за вашу помощь. @DaniP отличный codepen, чистый и простой. Очень приятно, что мне не нужно создавать подобные уникальные идеи (быстрее копировать и вставлять разделы. Спасибо за отличную помощь.
4. Мы рады помочь вам @WarddeMuynck пожалуйста, отметьте этот вопрос как решенный, это правильный ответ
5. @WarddeMuynck в левой части этого ответа, где вы можете увидеть голоса за ответ под номером, это серая галочка. Вы можете изменить ее на зеленую, нажав на нее в ответе, который, по вашему мнению, является правильным или который поможет вам