DataTablesのColumnFilterプラグインのSelectがおかしい件

ちょっと困ったのでメモ。

DataTablesColumnFilterプラグインはなかなか使い勝手が良いので気に入っている。が、ちょっとバグくさい動きを発見した。

Typeをselectにするとセレクトボックス方式のフィルタリングができるのだが、このフィルタリングはどうも部分一致になっているようだ。だから、たとえば

  • スバル
  • スバル フォレスター
  • スバル R2
  • マツダ AZ-1
  • いすゞ ジェミニ

という選択肢があって、「スバル」を選択したら、まあ「スバル」だけが出てくると思うだろう。セレクトボックス(コンボボックス)なのだから。でも、出てくるのは

  • スバル
  • スバル フォレスター
  • スバル R2

の3つとなる。俺はこれ、バグだと思う。で、フォーラムを見たらIssue 137で同じような事が書いてあった。どうも今のところ、本体のコードを直すしか無いっぽい。直す箇所は当該記事を参照すると以下の様な感じ。大体377行目あたりのコード。

from: oTable.fnFilter($(this).val(), iColumn, bRegex); // Issue 41 
to:   oTable.fnFilter($(this).val() ? "^" + unescape($(this).val()) + "$" : $(this).val(), iColumn, bRegex);

ただ、当該箇所は正規表現を使う設定(bRegex: true)の場合にしか通らない。正規表現OFFだと部分一致するコードに進む。個人的にはもう正規表現有効だろうと無効だろうと問答無用で完全一致でいいと思う。だってセレクトボックスだろ?予め選択肢が用意されていてユーザーがそれ以外の文字を入力できないようになってるんだから、部分一致する意味がわからない。

ちなみに、Issue 137でDataTablesのfnFilterを使えとか(暗に)言ってるひとが居て、で、StackOverflowでも同じような事を主張している。同一人物かどうかは知らんが。

でもな、いやいや、そういうめんどくさい事をしたくないからColumnFilterプラグインを使うのであって、そこまでするんだったら最初から手前で実装するっつうの。おっかしいじゃん。

なんかもう意味わかんねーな。こんなしょうもないバグ、すぐに直るだろうが。直せよ。と思うのだけど、それを日本語でこのブログで言っていてもしょうがないな。人はこうしてオープンソース開発プロジェクトに参加してゆくのだろうか。

でも残念。俺はそんな暇はない。来期、暇ができたらやるかもしれない。

2件のコメント

  1. masaki より:

    全く同じ境遇におちいりました。
    結局、表示するデータそのものの共通文字をなくしてセレクトボックス内で完全区別出来るようにしました。
    データベースから抽出時の出力文字に手を加えて、ここで言えば「スバル」=>「スバル。」みたいな感じに変更。
    まったくもって根本的な解決になっていないけど、ソースをあーだこーだいじくるよりは簡単です。

    1. withpop より:

      運用で回避できるのであればそれが一番手間がかからず良いですね。コードをいじってしまうとその後の保守が若干大変になってしまいますし。

ただいまコメントは受け付けていません。