所以我有一个HTML链接数组;
[
"<a href=\"...\" target=\"_blank\">foo</a>",
"<a href=\"...\" target=\"_blank\">apple</a>",
"<a href=\"...\" target=\"_blank\">cucumber</a>"
]
我想根据它面向用户的输出(即a
标签的内容)对其进行排序;
[
"<a href=\"...\" target=\"_blank\">apple</a>",
"<a href=\"...\" target=\"_blank\">cucumber</a>",
"<a href=\"...\" target=\"_blank\">foo</a>"
]
我想我必须去掉HTML标记,然后再去掉.sort()
,但我不知道如何将其与原始数组协调。我该怎么做?
发布于 2014-07-06 06:56:09
您可以使用DOMParser解析HTML并获取标记的内容。
如果不使用regex,只要选择器匹配,标记就可以是任何东西,这通常是regex 并不能真正解析HTML所需要的。
然后使用localeCompare比较字符串,这避免了区分大小写和使用<
或>
的特殊字符的问题。
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);
});
发布于 2014-07-06 06:53:57
您可以使用regex和比较函数轻松地做到这一点。
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()
返回的数组中将捕获组的内容(我们希望的字符串)作为第二个元素。
发布于 2014-07-06 06:56:17
将sortfunction
参数传递给sort method
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
https://stackoverflow.com/questions/24593371
复制相似问题