#javascript #html #jquery
#javascript #HTML #jquery
Вопрос:
На моем веб-сайте мне нужно получить индекс раздела выбранных элементов.
Есть один, <div>
с несколькими <section>
, и у каждого из них есть <ul>
. У каждого раздела есть собственные, уникальные заголовки разделов.
Если щелкнуть элемент списка, класс переходит из listFUTItem has-auction-data
в listFUTItem has-auction-data active
(пытался перестроить это на игровой площадке).
Одновременно может быть активен <div>
только один элемент списка. (Работает не на этом обрезанном, а на веб-сайте)
На данный момент мой код работает следующим образом: itemList = document.querySelectorAll('.sectioned-item-list > ul')[2]
Но индекс должен быть переменным.
$('.listFUTItem').click(function() {
$(this).siblings().filter('.active').removeClass('active');
$(this).addClass('listFUTItem has-auction-data active');
console.log( $('.listFUTItem.has-auction-data').index(this) );
});
.active {
background: #00FF00;
}
.ut-section-header-view {
padding: .75rem .5rem;
background-color: #f2f2f2;
box-sizing: border-box;
display: flex;
font-family: sans-serif;
overflow: hidden;
text-transform: uppercase;
}
.listFUTitem {
display: flex;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="transferlist" style="height: calc(100% - 2.5rem); width: calc(100% - 350px);">
<section class="sectioned-item-list>
<header class="ut-section-header-view">
<h2>Unsold Items</h2>
</header>
<ul class="paginated">
<li class="listFUTItem has-auction-data"> Ballack</li>
<li class="listFUTItem has-auction-data"> Lehmann</li>
<li class="listFUTItem has-auction-data"> Pique</li>
<li class="listFUTItem has-auction-data"> Kroos</li>
<li class="listFUTItem has-auction-data"> Owen</li>
</ul>
<section class="sectioned-item-list>
<header class="ut-section-header-view">
<h2>Sold Items</h2>
</header>
<ul class="paginated">
<li class="listFUTItem has-auction-data"> Ballack</li>
<li class="listFUTItem has-auction-data"> Lehmann</li>
<li class="listFUTItem has-auction-data"> Pique</li>
<li class="listFUTItem has-auction-data"> Kroos</li>
<li class="listFUTItem has-auction-data"> Owen</li>
</ul>
</div>
<section class="sectioned-item-list>
<header class="ut-section-header-view">
<h2>Available Items</h2>
</header>
<ul class="paginated">
<li class="listFUTItem has-auction-data"> Ballack</li>
<li class="listFUTItem has-auction-data"> Lehmann</li>
<li class="listFUTItem has-auction-data"> Pique</li>
<li class="listFUTItem has-auction-data"> Kroos</li>
<li class="listFUTItem has-auction-data"> Owen</li>
</ul>
</div>
<section class="sectioned-item-list>
<header class="ut-section-header-view">
<h2>Unsold Items</h2>
</header>
<ul class="paginated">
<li class="listFUTItem has-auction-data"> Ballack</li>
<li class="listFUTItem has-auction-data"> Lehmann</li>
<li class="listFUTItem has-auction-data"> Pique</li>
<li class="listFUTItem has-auction-data"> Kroos</li>
<li class="listFUTItem has-auction-data"> Owen</li>
</ul>
</div>
Ответ №1:
Используйте closest()
, чтобы перейти к <section>
и получить его индекс в коллекции всех разделов этого класса
const $sections = $('.sectioned-item-list');
$('.listFUTItem').click(function() {
const $sect = $(this).closest('.sectioned-item-list');
const sectIndex = $sections.index($sect);
console.log(sectIndex)
});
.active {
background: #00FF00;
}
.ut-section-header-view {
padding: .75rem .5rem;
background-color: #f2f2f2;
box-sizing: border-box;
display: flex;
font-family: sans-serif;
overflow: hidden;
text-transform: uppercase;
}
.listFUTitem {
display: flex;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="transferlist" style="height: calc(100% - 2.5rem); width: calc(100% - 350px);">
<section class="sectioned-item-list">
<header class="ut-section-header-view">
<h2>Unsold Items</h2>
</header>
<ul class="paginated">
<li class="listFUTItem has-auction-data"> Ballack</li>
<li class="listFUTItem has-auction-data"> Lehmann</li>
<li class="listFUTItem has-auction-data"> Pique</li>
<li class="listFUTItem has-auction-data"> Kroos</li>
<li class="listFUTItem has-auction-data"> Owen</li>
</ul>
<section class="sectioned-item-list">
<header class="ut-section-header-view">
<h2>Sold Items</h2>
</header>
<ul class="paginated">
<li class="listFUTItem has-auction-data"> Ballack</li>
<li class="listFUTItem has-auction-data"> Lehmann</li>
<li class="listFUTItem has-auction-data"> Pique</li>
<li class="listFUTItem has-auction-data"> Kroos</li>
<li class="listFUTItem has-auction-data"> Owen</li>
</ul>
</div>
<section class="sectioned-item-list">
<header class="ut-section-header-view">
<h2>Available Items</h2>
</header>
<ul class="paginated">
<li class="listFUTItem has-auction-data"> Ballack</li>
<li class="listFUTItem has-auction-data"> Lehmann</li>
<li class="listFUTItem has-auction-data"> Pique</li>
<li class="listFUTItem has-auction-data"> Kroos</li>
<li class="listFUTItem has-auction-data"> Owen</li>
</ul>
</div>
<section class="sectioned-item-list">
<header class="ut-section-header-view">
<h2>Unsold Items</h2>
</header>
<ul class="paginated">
<li class="listFUTItem has-auction-data"> Ballack</li>
<li class="listFUTItem has-auction-data"> Lehmann</li>
<li class="listFUTItem has-auction-data"> Pique</li>
<li class="listFUTItem has-auction-data"> Kroos</li>
<li class="listFUTItem has-auction-data"> Owen</li>
</ul>
</div>
Ответ №2:
Для этого вы могли бы использовать jQuery
parents
. Используется $('.transferlist section ul li.active').removeClass('active')
для удаления .active
класса из всех активных элементов списка. Запустите следующий фрагмент, чтобы проверить результат:
$(this).index();
против
$(".listFUTItem.has-auction-data").index(this);
$('.listFUTItem').click(function() {
$('.transferlist section ul li.active').removeClass('active');
$(this).addClass('listFUTItem has-auction-data active');
console.clear();
console.log('$(this).index() value is ->t' $(this).index());
console.log('$(this).parents("section").index() value is ->t' $(this).parents("section").index());
console.log('$(".listFUTItem.has-auction-data").index(this) value is ->t' $('.listFUTItem.has-auction-data').index(this));
});
.active {
background: #00FF00;
}
.ut-section-header-view {
padding: .75rem .5rem;
background-color: #f2f2f2;
box-sizing: border-box;
display: flex;
font-family: sans-serif;
overflow: hidden;
text-transform: uppercase;
}
.listFUTitem {
display: flex;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="transferlist" style="height: calc(100% - 2.5rem); width: calc(100% - 350px);">
<section class="sectioned-item-list">
<header class="ut-section-header-view">
<h2>Unsold Items</h2>
</header>
<ul class="paginated ">
<li class="listFUTItem has-auction-data "> Ballack</li>
<li class="listFUTItem has-auction-data "> Lehmann</li>
<li class="listFUTItem has-auction-data "> Pique</li>
<li class="listFUTItem has-auction-data "> Kroos</li>
<li class="listFUTItem has-auction-data "> Owen</li>
</ul>
</section>
<section class="sectioned-item-list">
<header class="ut-section-header-view">
<h2>Sold Items</h2>
</header>
<ul class="paginated">
<li class="listFUTItem has-auction-data"> Ballack</li>
<li class="listFUTItem has-auction-data"> Lehmann</li>
<li class="listFUTItem has-auction-data"> Pique</li>
<li class="listFUTItem has-auction-data"> Kroos</li>
<li class="listFUTItem has-auction-data"> Owen</li>
</ul>
</section>
<section class="sectioned-item-list">
<header class="ut-section-header-view">
<h2>Available Items</h2>
</header>
<ul class="paginated ">
<li class="listFUTItem has-auction-data "> Ballack</li>
<li class="listFUTItem has-auction-data "> Lehmann</li>
<li class="listFUTItem has-auction-data "> Pique</li>
<li class="listFUTItem has-auction-data "> Kroos</li>
<li class="listFUTItem has-auction-data "> Owen</li>
</ul>
</section>
<section class="sectioned-item-list">
<header class="ut-section-header-view">
<h2>Unsold Items</h2>
</header>
<ul class="paginated">
<li class="listFUTItem has-auction-data"> Ballack</li>
<li class="listFUTItem has-auction-data"> Lehmann</li>
<li class="listFUTItem has-auction-data"> Pique</li>
<li class="listFUTItem has-auction-data"> Kroos</li>
<li class="listFUTItem has-auction-data"> Owen</li>
</ul>
</section>
</div>