首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于输出的HTML数组排序

基于输出的HTML数组排序
EN

Stack Overflow用户
提问于 2014-07-06 06:45:25
回答 3查看 57关注 0票数 0

所以我有一个HTML链接数组;

代码语言:javascript
运行
复制
[
    "<a href=\"...\" target=\"_blank\">foo</a>",
    "<a href=\"...\" target=\"_blank\">apple</a>",
    "<a href=\"...\" target=\"_blank\">cucumber</a>"
]

我想根据它面向用户的输出(即a标签的内容)对其进行排序;

代码语言:javascript
运行
复制
[
    "<a href=\"...\" target=\"_blank\">apple</a>",
    "<a href=\"...\" target=\"_blank\">cucumber</a>",
    "<a href=\"...\" target=\"_blank\">foo</a>"
]

我想我必须去掉HTML标记,然后再去掉.sort(),但我不知道如何将其与原始数组协调。我该怎么做?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-06 06:56:09

您可以使用DOMParser解析HTML并获取标记的内容。

如果不使用regex,只要选择器匹配,标记就可以是任何东西,这通常是regex 并不能真正解析HTML所需要的。

然后使用localeCompare比较字符串,这避免了区分大小写和使用<>的特殊字符的问题。

代码语言:javascript
运行
复制
arr.sort(function(a,b) {
    var docA = new DOMParser().parseFromString(a, "text/html");
    var docB = new DOMParser().parseFromString(b, "text/html");
    var txtA = docA.querySelector('a').innerHTML;
    var txtB = docB.querySelector('a').innerHTML;

    return txtA.localeCompare(txtB);
});

小提琴

票数 5
EN

Stack Overflow用户

发布于 2014-07-06 06:53:57

您可以使用regex和比较函数轻松地做到这一点。

代码语言:javascript
运行
复制
var arr = [
    "<a href=\"...\" target=\"_blank\">foo</a>",
    "<a href=\"...\" target=\"_blank\">apple</a>",
    "<a href=\"...\" target=\"_blank\">cucumber</a>"
]

function compFunc(a,b){
   return a.match(/>(.*)</)[1] > b.match(/>(.*)</)[1];
}

console.log(arr.sort(compFunc))

小提琴

regex将匹配关闭的>与以下打开的<之间的任何内容(需要确保它们之间的内容不包含这些字符),而(.*)周围的括号意味着它是一个捕获组,从.match()返回的数组中将捕获组的内容(我们希望的字符串)作为第二个元素。

票数 3
EN

Stack Overflow用户

发布于 2014-07-06 06:56:17

sortfunction参数传递给sort method

代码语言:javascript
运行
复制
var arr = [
    "<a href=\"...\" target=\"_blank\">foo</a>",
    "<a href=\"...\" target=\"_blank\">apple</a>",
    "<a href=\"...\" target=\"_blank\">cucumber</a>"
];

var sorted = arr.sort(function(a, b) {
    a = strip(a);
    b = strip(b)
    return a.localCompare(b);
}

下面是你是如何制作这一条的:从文本JavaScript中提取HTML

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24593371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档