javascript - 从节点排序字母数字 li
问题描述
从一个 html 页面,我能够通过一个节点列表获得一个节点列表querySelectorAll.
,然后通过一个循环,我得到了我需要工作的节点,所以:
给定具有以下格式的节点列表的节点:
<div id="search_filters">
<section class="facet clearfix">
<p>something3</p>
<ul>
<li>text1 abc-def 200-201<span>(35)</span></li>
<li>text2 hjk-lef 203 <span>(11)</span></li>
<li>text3 fgh 204 <span>(250)</span></li>
<li>text4 sfsa 205 <span>(100)</span></li>
</ul>
</section>
</div>
我正在尝试对<li>
in desc 数字方式进行排序。
例如,如果我有几个li
这样的文本:
1) abc-def 200-201
2) fgh 204
3) hjk-lef 203
我想像这样对它们进行排序(最后一个数字是排序的重要因素,所以在情况(3)中重要的是 201):
1) fgh 204
2) hjk-lef 203
3) abc-def 200-201
我曾经虽然可以在临时节点上修剪单词,而不是按降序方式对数字进行排序,但是在我需要工作的节点上放置正确的顺序时遇到了麻烦。
有任何想法吗?
解决方案
这是我使用排序原型和正则表达式使其工作的方式
<section class="facet clearfix">
<ul id="facet_67493" class="collapse">
<li>
<label class="facet-label" for="facet_input_67493_0">
<span class="custom-checkbox">
<input id="facet_input_67493_0" data-search-url="#?q=Stagione-Autunno--Inverno+2014--2015" type="checkbox">
<span class="ps-shown-by-js"><i class="material-icons rtl-no-flip checkbox-checked"></i></span>
</span>
<a href="#?q=Stagione-Autunno--Inverno+2014--2015" class="_gray-darker search-link js-search-link" rel="nofollow">
Autunno-Inverno 2014-2015
<span class="magnitude">(1)</span>
</a>
</label>
</li>
<li>
<label class="facet-label" for="facet_input_67493_1">
<span class="custom-checkbox">
<input id="facet_input_67493_1" data-search-url="#?q=Stagione-Autunno--Inverno+2015--2016" type="checkbox">
<span class="ps-shown-by-js"><i class="material-icons rtl-no-flip checkbox-checked"></i></span>
</span>
<a href="#?q=Stagione-Autunno--Inverno+2015--2016" class="_gray-darker search-link js-search-link" rel="nofollow">
Autunno-Inverno 2015-2016
<span class="magnitude">(3)</span>
</a>
</label>
</li>
<li>
<label class="facet-label" for="facet_input_67493_2">
<span class="custom-checkbox">
<input id="facet_input_67493_2" data-search-url="#?q=Stagione-Autunno--Inverno+2016--2017" type="checkbox">
<span class="ps-shown-by-js"><i class="material-icons rtl-no-flip checkbox-checked"></i></span>
</span>
<a href="#?q=Stagione-Autunno--Inverno+2016--2017" class="_gray-darker search-link js-search-link" rel="nofollow">
Autunno-Inverno 2016-2017
<span class="magnitude">(27)</span>
</a>
</label>
</li>
<li>
<label class="facet-label" for="facet_input_67493_3">
<span class="custom-checkbox">
<input id="facet_input_67493_3" data-search-url="#?q=Stagione-Autunno--Inverno+2017--2018" type="checkbox">
<span class="ps-shown-by-js"><i class="material-icons rtl-no-flip checkbox-checked"></i></span>
</span>
<a href="#?q=Stagione-Autunno--Inverno+2017--2018" class="_gray-darker search-link js-search-link" rel="nofollow">
Autunno-Inverno 2017-2018
<span class="magnitude">(75)</span>
</a>
</label>
</li>
<li>
<label class="facet-label" for="facet_input_67493_4">
<span class="custom-checkbox">
<input id="facet_input_67493_4" data-search-url="#?q=Stagione-Autunno--Inverno+2018--2019" type="checkbox">
<span class="ps-shown-by-js"><i class="material-icons rtl-no-flip checkbox-checked"></i></span>
</span>
<a href="#?q=Stagione-Autunno--Inverno+2018--2019" class="_gray-darker search-link js-search-link" rel="nofollow">
Autunno-Inverno 2018-2019
<span class="magnitude">(203)</span>
</a>
</label>
</li>
<li>
<label class="facet-label" for="facet_input_67493_5">
<span class="custom-checkbox">
<input id="facet_input_67493_5" data-search-url="#?q=Stagione-Autunno--Inverno+2019--2020" type="checkbox">
<span class="ps-shown-by-js"><i class="material-icons rtl-no-flip checkbox-checked"></i></span>
</span>
<a href="#?q=Stagione-Autunno--Inverno+2019--2020" class="_gray-darker search-link js-search-link" rel="nofollow">
Autunno-Inverno 2019-2020
<span class="magnitude">(268)</span>
</a>
</label>
</li>
<li>
<label class="facet-label" for="facet_input_67493_6">
<span class="custom-checkbox">
<input id="facet_input_67493_6" data-search-url="#?q=Stagione-Primavera--Estate+2015" type="checkbox">
<span class="ps-shown-by-js"><i class="material-icons rtl-no-flip checkbox-checked"></i></span>
</span>
<a href="#?q=Stagione-Primavera--Estate+2015" class="_gray-darker search-link js-search-link" rel="nofollow">
Primavera-Estate 2015
<span class="magnitude">(1)</span>
</a>
</label>
</li>
<li>
<label class="facet-label" for="facet_input_67493_7">
<span class="custom-checkbox">
<input id="facet_input_67493_7" data-search-url="#?q=Stagione-Primavera--Estate+2016" type="checkbox">
<span class="ps-shown-by-js"><i class="material-icons rtl-no-flip checkbox-checked"></i></span>
</span>
<a href="#?q=Stagione-Primavera--Estate+2016" class="_gray-darker search-link js-search-link" rel="nofollow">
Primavera-Estate 2016
<span class="magnitude">(3)</span>
</a>
</label>
</li>
<li>
<label class="facet-label" for="facet_input_67493_8">
<span class="custom-checkbox">
<input id="facet_input_67493_8" data-search-url="#?q=Stagione-Primavera--Estate+2017" type="checkbox">
<span class="ps-shown-by-js"><i class="material-icons rtl-no-flip checkbox-checked"></i></span>
</span>
<a href="#?q=Stagione-Primavera--Estate+2017" class="_gray-darker search-link js-search-link" rel="nofollow">
Primavera-Estate 2017
<span class="magnitude">(61)</span>
</a>
</label>
</li>
<li>
<label class="facet-label" for="facet_input_67493_9">
<span class="custom-checkbox">
<input id="facet_input_67493_9" data-search-url="#?q=Stagione-Primavera--Estate+2018" type="checkbox">
<span class="ps-shown-by-js"><i class="material-icons rtl-no-flip checkbox-checked"></i></span>
</span>
<a href="#?q=Stagione-Primavera--Estate+2018" class="_gray-darker search-link js-search-link" rel="nofollow">
Primavera-Estate 2018
<span class="magnitude">(220)</span>
</a>
</label>
</li>
<li>
<label class="facet-label" for="facet_input_67493_10">
<span class="custom-checkbox">
<input id="facet_input_67493_10" data-search-url="#?q=Stagione-Primavera--Estate+2019" type="checkbox">
<span class="ps-shown-by-js"><i class="material-icons rtl-no-flip checkbox-checked"></i></span>
</span>
<a href="#?q=Stagione-Primavera--Estate+2019" class="_gray-darker search-link js-search-link" rel="nofollow">
Primavera-Estate 2019
<span class="magnitude">(433)</span>
</a>
</label>
</li>
</ul>
</section>
const needle = "something3";
const selection = document.querySelectorAll('section.facet.clearfix');
let i = -1;
let targetIndex;
while(++i < selection.length){
if(selection[i].innerHTML.indexOf(needle) > -1){
targetIndex = i;
}
}
const getNum = function(node, innerElement){
const target = node.querySelector(innerElement);
if(!target){
console.warn("No matches for inner selector");
return 0;
}
let haystack = ""
if(target.childNodes.length > 0){
haystack = target.childNodes[0].textContent;
}
else{
haystack = target.innerHTML;
}
// console.info("haystack", haystack);
const numericMatches = (haystack).match(/\d{1,}/g);
const result = +numericMatches[numericMatches.length-1];
console.info("RESULT", result);
return result;
};
const ul = selection[targetIndex].querySelector("ul");
const lis = [...ul.querySelectorAll("li")].sort(function(a, b){
return getNum(b, "a") - getNum(a, "a");
});
i = -1; // We already declared this above
while(++i < lis.length){
ul.appendChild(lis[i]);
}
推荐阅读
- firebase - 任务“:cloud_firestore:extractDebugAnnotations”执行失败
- python - 使用学生数据集进行关联规则挖掘
- python - Flask Post 没有进入同一页面
- java - 增加胎面数量会导致更长的循环持续时间
- ios - 如何在选择时更改自定义表格视图中单元格的 UI 元素的状态?
- javascript - Javascript - 两个相同的对象失败不等于检查
- python - 如何在 AutoKeras 1.0 中保存/加载模型
- python - “OpenBLAS 警告 - 无法确定此系统上的 L2 缓存大小,假设为 256k”,将实例设置为 max(B8)
- microsoft-dynamics - D365FO 中的批量操作
- php - 尝试通过 PHP Curl 发送 json 时如何修复 400 Bad Request?