gpt4 book ai didi

javascript - HTML多个ul>li使用jquery来回遍历

转载 作者:行者123 更新时间:2023-12-02 23:06:21 24 4
gpt4 key购买 nike

我正在尝试使用“下一个”/“上一个”按钮遍历多个列表。我的方法适用于单个列表。我无法找到最初选择的列表下方或上方的列表的 ID。我必须使用什么 jquery 方法?我在下面发布了我的示例代码,希望它有意义。

我尝试了 .parent().next() 没有成功。

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>List</title>
<style>
.selected_bkg {
color: blue;
text-decoration: underline;
cursor: pointer;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>

<button id="prv">Prev</button><button id="next">Next</button>
<div id="liid" hidden>1a</div>
<div id="uls">
<div class="">Category Fruits</div>
<ul>
<li class="lis selected_bkg" id="1a">Orange</li>
<li class="lis" id="2a">Apple</li>
<li class="lis" id="3a">Pear</li>
</ul>
<div class="">Category Vegitables</div>
<ul>
<li class="lis" id="1b">Carrot</li>
<li class="lis" id="2b">Cabbage</li>
<li class="lis" id="3b">Brocoli</li>
</ul>
<div class="">Category Meat</div>
<ul>
<li class="lis" id="1c">Beef</li>
<li class="lis" id="2c">Chicken</li>
<li class="lis" id="3c">Mutton</li>
</ul>
</div>
<script>
$('#next').click(function() {
lid=$('#liid').text()
$('#'+lid).toggleClass('selected_bkg')
nxtid=$('#'+lid).next('.lis').attr('id')
if(typeof nxtid == 'undefined') {
nxtid=$('#'+lid).parent().next('.lis').attr('id')
}
$('#'+nxtid).toggleClass('selected_bkg')
console.log(lid, nxtid, '-',$('#'+nxtid).text(),'-')
$('#liid').text(nxtid)
});
$('#prv').click(function() {
lid=$('#liid').text()
$('#'+lid).toggleClass('selected_bkg')
nxtid=$('#'+lid).prev('.lis').attr('id')
if(typeof nxtid == 'undefined') {
nxtid=$('#'+lid).parent().prev('.lis').attr('id')
}
$('#'+nxtid).toggleClass('selected_bkg')
console.log(lid, nxtid, '-',$('#'+nxtid).text(),'-')
$('#liid').text(nxtid)
});
</script>

</body>
</html>

最佳答案

这里有一个片段可以解决这个问题 - 循环遍历列表项,而不是注意“它们在哪里”。

$('#next').on('click', function() {
nextPrev(1)
})

$('#prv').on('click', function() {
nextPrev(-1)
})

// this function handles the prv and next button clicks
// by using the dir (direction) parameter, that can be
// 1 (one) or -1 (negative one)
function nextPrev(dir) {
let index = 0

// iterating over the items, so we can find the index of
// the selected item in the list of the selector items
$('.lis').each(function(i, el) {
if ($(el).hasClass('selected_bkg')) {
index = i
}
})

// handling class changes (removing class and adding class
// to previous or next item)
if ((index + (1 * dir) >= 0) && (index + (1 * dir) < $('.lis').length)) {
$($('.lis')[index]).removeClass('selected_bkg')
$($('.lis')[index + (1 * dir)]).addClass('selected_bkg')
}
}
.selected_bkg {
color: blue;
text-decoration: underline;
cursor: pointer;
}
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>

<button id="prv">Prev</button><button id="next">Next</button>
<div id="liid" hidden>1a</div>
<div id="uls">
<div class="">Category Fruits</div>
<ul>
<li class="lis selected_bkg" id="1a">Orange</li>
<li class="lis" id="2a">Apple</li>
<li class="lis" id="3a">Pear</li>
</ul>
<div class="">Category Vegitables</div>
<ul>
<li class="lis" id="1b">Carrot</li>
<li class="lis" id="2b">Cabbage</li>
<li class="lis" id="3b">Brocoli</li>
</ul>
<div class="">Category Meat</div>
<ul>
<li class="lis" id="1c">Beef</li>
<li class="lis" id="2c">Chicken</li>
<li class="lis" id="3c">Mutton</li>
</ul>
</div>

基本思想是jQuery通过选择器创建一个对象列表。因此 $('.lis') 不仅是 ONE ELEMENT,而且是与此选择器匹配的所有元素 - 但为了便于使用,它指的是第一个元素当你这样写时发现。

由于 jQuery 对象实际上是一个列表,因此您可以使用 $.each() 对其进行迭代,并逐个元素执行操作。因此,您不必知道所选元素在 DOM 中的具体位置,只需知道它们是由选择器选择的即可。

我的代码片段中唯一缺少的是,您可以在第一个元素之前使用 prv ,在最后一个元素之后添加 next - 因此您需要为其添加“守卫” .

编辑

我完成了“守卫” - 您无法在第 1 项之前prv或在最后一项之后下一个

关于javascript - HTML多个ul>li使用jquery来回遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57579327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com