【问题标题】:Strip HTML tags from filter with custom sType使用自定义 sType 从过滤器中去除 HTML 标签
【发布时间】:2014-05-26 11:21:19
【问题描述】:

我有一个定义为的数据表

        $('#group').dataTable( {
         "sDom": '<"H"fi>t<"F">', 
        "aaSorting": [ [2,'asc'], [1,'asc'] ],
        "aoColumnDefs": [
            {"aTargets": [ 0 ],      "sType": null,         "bSortable": false, "bSearchable": false },       
            {"aTargets": [ 1, 2 ],   "sType": "html",       "asSorting": [ "asc", "desc" ] },      
            {"aTargets": [ 3 ],      "sType": "gcse-grade", "asSorting": [ "desc", "asc" ] },      
            {"aTargets": [ "_all" ], "sType": "grade",      "asSorting": [ "desc", "asc" ] } 
        ],
        "bAutoWidth": false,
        "bFilter": true,
        "bInfo": true,
        "bLengthChange": false,
        "bPaginate": false,
        "bScrollAutoCss": true,
        "bScrollCollapse": true,
        "bSort": true,
        "oLanguage": { "sSearch": "_INPUT_" }
     }
    );

如您所见,我使用了名为 gradegcse_grade 的自定义 sType。我使用 oSort 自定义排序工作正常。但是,当我创建表格时,这些列有时会在其中包含 HTML 标记。

我如何过滤这些,以便它首先从内部剥离 HTML 标签。也就是说,过滤器只看到文本,而不是标签(因为我不希望过滤器拾取任何 , 或标签)。

我这里有一个fiddle

【问题讨论】:

    标签: javascript jquery html datatables


    【解决方案1】:

    要在过滤器搜索中去除 html 标签,您可以使用如下方式:

    "aoColumnDefs": [
        {   "aTargets": [0],
            "mRender": function ( data, type, full ) {
                if (type === 'filter') {
                    return data.replace(/(<([^>]+)>)/ig,"");
                }
    
                return data;
            }
        }
    ]
    

    【讨论】:

      【解决方案2】:

      如果这只是为了排序,试试这个:

      jQuery.fn.dataTableExt.oSort['gcse-grade-asc']  = function (a, b) {
          var x = $('<div />').append(a).text();      // append to div element and get [inner]text to strip tags
          var y = $('<div />').append(b).text();      // append to div element and get [inner]text to strip tags
          return ((x < y) ? -1 : ((x > y) ? 1 : 0));  // sort like normal
      };
      
      jQuery.fn.dataTableExt.oSort['gcse-grade-desc'] = function (a, b) {
          var x = $('<div />').append(a).text();      // append to div element and get [inner]text to strip tags
          var y = $('<div />').append(b).text();      // append to div element and get [inner]text to strip tags
          return ((x < y) ? 1 : ((x > y) ? -1 : 0));  // sort like normal
      };
      
      jQuery.fn.dataTableExt.oSort['grade-asc']  = function (a, b) {
          var x = $('<div />').append(a).text();      // append to div element and get [inner]text to strip tags
          var y = $('<div />').append(b).text();      // append to div element and get [inner]text to strip tags
          return ((x < y) ? -1 : ((x > y) ? 1 : 0));  // sort like normal
      };
      
      jQuery.fn.dataTableExt.oSort['grade-desc'] = function (a, b) {
          var x = $('<div />').append(a).text();      // append to div element and get [inner]text to strip tags
          var y = $('<div />').append(b).text();      // append to div element and get [inner]text to strip tags
          return ((x < y) ? 1 : ((x > y) ? -1 : 0));  // sort like normal
      };
      

      如果您需要它进行过滤(和排序等),只需使用fnRowCallback 函数代替在绘制表格之前操作实际内容:

      "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
          var gcse = $('td:eq(2)', nRow),     // cache lookup
              grade = $('td:eq(3)', nRow);    // cache lookup
          gcse.html(gcse.text());
          grade.html(grade.text());
      }
      

      【讨论】:

      • 感谢您的回复。我使用 oSort 可以按预期进行排序,我只需要过滤工作,但不需要在过滤结果中包含任何 HTML 标记。我已尝试过您建议的 fnRowCallBack,但无法使其正常运行。基本上,如果可能,我需要从所有列中删除 html,无论它们的 sType 是什么。
      • 由于功能不正常,它会在呈现之前剥离所有 html,从而将所有格式、锚点等排除在显示的表格之外,但仍将它们包含在过滤器中。这有点与我想做的相反......如果你明白我的意思吗?我想保留所有呈现的 html,但将其剥离,使其不会出现在过滤器中。
      • 你能用测试数据(即不是真实数据,而是模仿真实数据的东西)设置一个小提琴吗?
      • 我第一次使用小提琴 - 很棒的资源!这是我的示例jsfiddle.net/peetz/5AFce 该表是使用可变数量的学生/单位生成的,因此该表可以有任意数量的行/列。你会看到我使用 是出于不同的原因,并且也有一些 被投入使用。
      猜你喜欢
      • 2016-01-30
      • 2018-06-02
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 2021-12-31
      • 1970-01-01
      相关资源
      最近更新 更多