Javascript 如何从页面上的多个列表中应用截断/隐藏列表项?
我有一个方便的代码段[见下文],它使用jQuery将一组列表项截断为给定数量。但是,我一直在研究如何修改这个脚本,以便在一个页面上处理多个列表。你能帮忙吗 假设我在一个页面上有5个100项的列表。如何在每个列表中动态隐藏不同数量的列表项 以下是它当前的工作方式(每页一个列表):Javascript 如何从页面上的多个列表中应用截断/隐藏列表项?,javascript,jquery,ajax,list,Javascript,Jquery,Ajax,List,我有一个方便的代码段[见下文],它使用jQuery将一组列表项截断为给定数量。但是,我一直在研究如何修改这个脚本,以便在一个页面上处理多个列表。你能帮忙吗 假设我在一个页面上有5个100项的列表。如何在每个列表中动态隐藏不同数量的列表项 以下是它当前的工作方式(每页一个列表): 函数ShowItems(){ 如果(Count>$(“ul.truncateList>li”).size(){Count=$(“ul.truncateList>li”).size()}; $(“ul.truncateL
函数ShowItems(){
如果(Count>$(“ul.truncateList>li”).size(){Count=$(“ul.truncateList>li”).size()};
$(“ul.truncateList>li:lt(“+Count+”).show();
$(“ul.truncateList>li:gt(“+(计数-1)+”).hide();
}
(函数($){
变量listItems=$('ul.truncateList')。数据('listItems');
计数=列表项;
ShowItems();
$('.listhhide').toggle();
$('.listShow')。单击(函数(){
计数=100000;
ShowItems();
$('.listShow').toggle();
$('.listhhide').toggle();
});
$('.listHide')。单击(函数(){
计数=列表项;
ShowItems();
$('.listShow').toggle();
$('.listhhide').toggle();
});
})(jQuery);
用法:
<ul class="truncateList" data-listItems="25">
<li>One</li>
....
<li>Twenty Six</li>
</ul>
<span class="listShow">View All</span>
<span class="listHide">View Less</span>
- 一个
....
- 二十六
查看所有
少看
第二十六个列表项(以及更大的列表项)将隐藏,直到单击“全部查看”。但是,如果我将第二个列表与类“truncateList”放在同一页上,它将不起作用
我当然愿意接受更优雅的解决方案,以解决在用户想要阅读更多内容之前(100%客户端)视觉隐藏长列表的整个挑战。我会将列表包装到父div中
<div class="truncateList">
<ul data-listItems="2">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<span class="listshow">View All</span>
<span class="listhide">View Less</span>
</div>
<div class="truncateList">
<ul data-listItems="3">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<span class="listshow">View All</span>
<span class="listhide">View Less</span>
</div>
并钩住单击事件以显示/隐藏列表
$(".listshow").click(function(e){
var list = $("ul", $(this).parent());
var count = list.data("listitems") - 1;
$("li", list).show();
});
$(".listhide").click(function(e){
var list = $("ul", $(this).parent());
var count = list.data("listitems") - 1;
$("li:gt(" + count + ")", list).hide();
});
我会把我的列表包装成父div
<div class="truncateList">
<ul data-listItems="2">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<span class="listshow">View All</span>
<span class="listhide">View Less</span>
</div>
<div class="truncateList">
<ul data-listItems="3">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<span class="listshow">View All</span>
<span class="listhide">View Less</span>
</div>
并钩住单击事件以显示/隐藏列表
$(".listshow").click(function(e){
var list = $("ul", $(this).parent());
var count = list.data("listitems") - 1;
$("li", list).show();
});
$(".listhide").click(function(e){
var list = $("ul", $(this).parent());
var count = list.data("listitems") - 1;
$("li:gt(" + count + ")", list).hide();
});
对于多个列表,使用自己的“显示/隐藏”进行选择,合并这两个跨距,并在每个列表后面放置一个控件,如下所示:
<ul class="truncateList" data-list-items="2">
<li>One</li>
...
</ul>
<button class="ShowHideFullLists" type="button">View All</button>
<h2>Second list:</h2>
<ul class="truncateList" data-list-items="4">
<li>A 1</li>
...
</ul>
<button class="ShowHideFullLists" type="button">View All</button>
对于控制所有列表的一个按钮。。。 然后
showHiddenFileLists
更改如下:
另外,请注意。对于多个列表,每个列表都有自己的“显示/隐藏”,合并这两个跨度,并在每个列表后面放置一个控件,如下所示:
<ul class="truncateList" data-list-items="2">
<li>One</li>
...
</ul>
<button class="ShowHideFullLists" type="button">View All</button>
<h2>Second list:</h2>
<ul class="truncateList" data-list-items="4">
<li>A 1</li>
...
</ul>
<button class="ShowHideFullLists" type="button">View All</button>
对于控制所有列表的一个按钮。。。 然后
showHiddenFileLists
更改如下:
另外,请注意。谢谢Brock。一个澄清:你能帮我为每个列表设置独立的显示/隐藏按钮吗?您的解决方案有一个按钮来控制所有这些。谢谢Brock。一个澄清:你能帮我为每个列表设置独立的显示/隐藏按钮吗?你的解决方案有一个按钮来控制它们。非常好。我添加了:“$(this.parent().find('.listShow').show();$(this.hide();”来切换按钮。我还向truncate函数添加了一个直接子选择器(>)以避免计算子列表:$('>li:gt…非常好。我添加了:“$(this.parent().find('.listShow').show();$(this.hide();”)以切换按钮。我还向truncate函数添加了一个直接子选择器(>)以避免计算子列表:$('>li:gt。。。
ShowHideFullLists (); //-- Init list displays.
//--- Activate the show/hide button.
$('#ShowHideFullLists').click (ShowHideFullLists);
function ShowHideFullLists () {
var showHideBtn = $('#ShowHideFullLists');
var bShowEm = showHideBtn.data ('bShowEm') || false;
//--- Loop through all the different lists.
$("ul.truncateList").each ( function () {
/*--- Show all or the number defined in the
data-list-items attribute.
*/
if (bShowEm)
ShowItems ( $(this), true);
else {
var jThis = $(this);
ShowItems (jThis, false, jThis.data ('listItems') );
}
} );
//--- Update the show-all flag.
bShowEm ^= true;
showHideBtn.data ('bShowEm', bShowEm);
//--- Update the button text.
if (bShowEm)
showHideBtn.text ('View All');
else
showHideBtn.text ('View Less');
}