对插件内的字符串进行排序

Posted

技术标签:

【中文标题】对插件内的字符串进行排序【英文标题】:Sorting the strings inside the plugin 【发布时间】:2013-03-17 06:17:48 【问题描述】:

我在这里有一个为网站编写的 javascript 插件,我正在修改插件以添加一些额外的功能。

该插件之前接受了一个项目数组作为输入,如下所示(最终创建一个小型可视化):

Tom Hank
Will Smith
Chirstopher Nolan
Keanu Reeves

在内部,插件使用排序函数对名称进行排序,如下所示:

groups = groups.sort(function (a, b) 
            if (a.content > b.content) 
                return 1;
            
            if (a.content < b.content) 
                return -1;
            
            return 0;
        );

其中a.contentb.content都是"Keanu Reaves"等字符串

但是,现在我更改了发送到插件的输入,而不是发送输入 strings,我现在发送 html 作为输入。例如:

<div class="sampleDiv"><span class="">Keanu Reaves</span></div>
<div class="sampleDiv"><span class="">Christopher</span></div> etc.

每个项目由

组成
var itemSrc= '<div class="sampleDiv"><span class="">' +
              'Keanu Reaves' + 
             '</span></div>';

我必须对插件中的项目进行类似的排序(在那个排序函数中),但是现在我正在发送 html(a.content 现在有上面的 html),我想从 SO 那里得到一些关于我如何做的想法在上面的函数中排序(以前的排序也应该保留,以防我以后将输入更改为仅发送字符串)。 有什么建议吗?

【问题讨论】:

这似乎是一个 XY 问题。与其修改脚本以获取 html,不如创建函数以将 html 中的文本提取到数组中,然后将其传递给已有的函数。或者您可以在对名称进行排序后创建 html。 @elclanrs :如果我不像现在这样传递自定义 html,我将无法为每个项目提供适当的可视化。但是,我可以做的是让用户打开一个选项isCustomHtmlPassed: true,其中提取方法可以在插件本身内部。这是正确的方法吗? 如果由于某种原因在创建 html 之前无法排序,那么我将使用带有文档片段的 DOM,然后排序,然后附加到容器。 或者我也应该传递提取方法,因为 html 可以通过 n 种方式传递,在这种情况下,用户也有责任传递提取方法。 @elclanrs :您能否详细介绍一下带有文档片段方法的 DOM 究竟是什么? 【参考方案1】:

在您的排序功能中,首先去除 html 标签。使用结果字符串,然后执行排序。

    groups = groups.sort(function (a, b) 
        var x = a.toLowerCase().replace(/<[a-zA-Z\/][^>]*>/g,''), y = b.toLowerCase().replace(/<[a-zA-Z\/][^>]*>/g,'');
        return x < y ? -1 : x > y ? 1 : 0;
    );

我希望这会有所帮助。

【讨论】:

以上是关于对插件内的字符串进行排序的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 对分组后的同类数据进行拼接字符串

基于struct内部的元素对指向struct的数组进行排序

jQuery插件 tablesorter 表格排序 使用说明

jQuery插件 tablesorter 表格排序 使用说明

alpha 对具有相同整数值且应按升序排列的列表进行排序[重复]

对大文件排序