9

jQuery DataTablesプラグインを使用していますが、フィルタリング機能にわずかな問題があります。のような内容のテーブルセルがあり<a href='foo6'>Blah</a>、「6」でフィルタリングすると、「Blah」に「6」がなくても、そのセルが表示されます。私がやりたいのは、DataTablesプラグインがフィルタリングを行うときにHTMLを無視するようにすることです。

DataTablesサイトを精査してみたところ、矛盾する、役に立たないリードが見つかりました。ある投稿sType:'html'では、aaColumnsの定義にオプションが必要であると提案されましたが、それを試しましたが、役に立ちませんでした...さらに、後の投稿では、現在のバージョンのDataTablesがHTMLsTypeを自動検出することを提案しました。このコードスニペットも見つかりました:

// Make filtering ignore HTML (see http://datatables.net/plug-ins/filtering)
$.fn.dataTableExt.ofnSearch['html'] = function ( sData ) {
    var n = document.createElement('div');
    n.innerHTML = sData;
    if (n.textContent) {
        return n.textContent.replace(/\n/g," ");
    } else {
        return n.innerText.replace(/\n/g," ");
    }
};

これは問題を修正するはずでした...しかし、そうではありませんでした。

だから、私の質問は、行をフィルタリングするときにDataTablesが非テキスト(つまりHTML)コンテンツを無視するようにする方法を知っている人はいますか?

4

4 に答える 4

6

mRender列ヘッダーにカスタム関数が必要であることが判明しました。さらに重要なことに(最初は「type」引数をチェックせずにこれを試したので)、その関数に提供されているtype引数を使用して、フィルタリング時にのみ適用されるようにする必要があります。

私の最終結果は次のようになりました。

aaHeaders: [{
    mRender: function(data, type, full) {
        // If we're filtering, don't look at the HTML; only filter on the text
        return type == 'filter' ? $(data).text() : data
    }
}], //...
于 2012-09-20T22:01:32.087 に答える
1

あなたはこれを試すことができます:

$.fn.dataTableExt.ofnSearch['html'] = function ( sData ) {
    return $("<div/>").html(sData).text();
}
于 2012-09-20T17:11:19.383 に答える
1

datatable.jsをアップグレードするだけです。1.9.4を使用しましたが、1.10.9にアップグレードした後、同じ問題が発生しました。問題は解決しました。

于 2015-09-22T13:34:56.073 に答える
0
// To override basic search functionality of datatable
            $.fn.dataTable.ext.search.push(
                    function( settings, data, dataIndex ) {
                        var tableId = settings['sTableId'];
                        var searchTerm = settings.oPreviousSearch.sSearch;
                        if ( 'tableId' == tableId){
//I added tableId condition as I have multiple table on same page..
                            if(data[0].indexOf(searchTerm) > -1 ||data[2].indexOf(searchTerm) > -1||data[3].indexOf(searchTerm) > -1||data[4].indexOf(searchTerm) > -1||data[5].indexOf(searchTerm) > -1 || data[6].indexOf(searchTerm) > -1){
                                return true;
                            }else{
                                return false;
                            }
                        }
                        return true;
                    }
            ); 
于 2015-05-19T12:06:39.550 に答える