对 HTML 列表进行排序,然后对目标元素进行排序
Order an HTML list and then target elements
我正在研究一个对HTML列表进行排序的函数。我在StackOverflow上找到了以下代码(谢谢!!),我做了一些调整。我的目标是对列表进行排序,然后在排序后显示未显示的(!(":visible")) lis 元素。该功能完美运行,无需显示未显示元素的特定部分。
function sortList(ul){
var new_ul = ul.cloneNode(false);
// Add all lis to an array
var lis = [];
for(var i = ul.childNodes.length; i--;){
if(ul.childNodes[i].nodeName === 'LI')
lis.push(ul.childNodes[i]);
}
// Sort the lis in descending order
lis.sort(function(a, b){
return parseInt(b.getElementsByClassName(variable)[0].innerHTML , 10) - parseInt(a. getElementsByClassName(variable)[0].innerHTML , 10);
});
if (order == 'asc') {lis.reverse();}
// Add them into the ul in order
for(var i = 0; i < lis.length; i++) {
//THIS IS THE PART that makes the function not working anymore
if (!lis[i].is(":visible")) {
lis[i].fadeToggle("slow","linear");
}
//END OF THE PART
new_ul.appendChild(lis[i]);
}
ul.parentNode.replaceChild(new_ul, ul);
}
我像这样调用函数: sortList(document.getElementsByClassName('list')[0],'date','asc');
我的 HTML 看起来像这样:
<ul class="list">
<li> <span class="date">1</span></li>
<li> <span class="date">2</span></li>
<li style="display:none;"> <span class="date">3</span></li>
<li style="display:none;" > <span class="date">4</span></li>
</ul>
谢谢你的帮助!
如果你打算使用jQuery作为切换函数,你需要把它包含在你的页面中
另外,您的sortList
函数没有向下传递其他参数,因此,我将其更改为此
function sortList(ul, variable, order) { // <-- pass the parameters here
var new_ul = ul.cloneNode(false);
// Add all lis to an array
var lis = [];
for (var i = ul.childNodes.length; i--;) {
if (ul.childNodes[i].nodeName === 'LI') lis.push(ul.childNodes[i]);
}
// Sort the lis in descending order
lis.sort(function (a, b) {
return parseInt(b.getElementsByClassName(variable)[0].innerHTML, 10) - parseInt(a.getElementsByClassName(variable)[0].innerHTML, 10);
});
if (order == 'asc') {
lis.reverse();
}
// Add them into the ul in order
for (var i = 0; i < lis.length; i++) {
//THIS IS THE PART that makes the function not working anymore
/* using jQuery notation for the jQuery function calls */
if (!$(lis[i]).is(":visible")) { // <-- here
$(lis[i]).fadeToggle("slow", "linear"); // <-- and here
}
//END OF THE PART
new_ul.appendChild(lis[i]);
}
ul.parentNode.replaceChild(new_ul, ul);
}
演示 JS 小提琴
最后,如果你使用的是jQuery,你可以用一个简单的$('.className')
替换你所有的getElementsByClassName(..)
,因为它基本上是相同的(即这是jQuery语法来完成相同的选择)
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 使用promise和mongoose对文档进行排序
- Selectize.js:如何对整数值的选项进行排序
- Javascript排序的图像弹出窗口..可以't单独弹出
- 如何通过引用var Using DataTables来进行分页或排序
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- AngularJs对所有页面中的所有记录进行排序
- 当属性不一致时,如何根据属性对JS对象列表进行排序
- 按从高到低对多个int变量进行排序
- jQuery UI可排序-多连接列表拖动
- Javascript排序字符串或数字
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- Href:当前DIV中的目标ID
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- sort而不是排序javascript
- 基于比较子元素内容和目标标题内容的Javascript排序元素
- 如何在目标可排序对象接收后获取拖动项的类
- 对 HTML 列表进行排序,然后对目标元素进行排序
- 如何在删除之前设置 jquery 可排序目标列表的样式