2014-10-27 67 views
1

假設我有一列包含多個值,例如,假設我們有一個包含教師名稱&個部門(逗號分隔)的表。教師可以屬於多個部門。在Jqgrid中搜索列中有多個值的值

我想要搜索包含以搜索字段中鍵入的字母開頭的部門的行。

現在我正在使用bw過濾器,它只用於逗號分隔列表中的第一個條目(因爲它將整個列表作爲單個字符串)。

+0

使用哪個'datatype'?是在本地搜索*還是需要將相應的搜索請求發送到服務器?您是否使用搜索對話框([高級搜索](http://www.trirand.com/jqgridwiki/doku.php?id=wiki:advanced_searching)),[工具欄搜索](http://www.trirand.com/ jqgridwiki/doku.php?id = wiki:toolbar_searching),還是其他一些自定義搜索? – Oleg 2014-10-27 11:19:52

+0

感謝您的迴應。我在本地搜索並使用工具欄搜索。 – Vivek 2014-10-27 11:24:12

回答

1

jqGrid不提供任何自定義操作的可能性,如「以開始」在逗號分隔的子字符串中搜索。所以人們必須使用標準操作。另一方面,可以繼承jqGrid在過濾過程中使用的對象的方法$.jgrid.from。我發佈了一些其他答案,展示了這種技術。這還不是那麼容易。因此,我創建the demo它演示瞭如何繼承的$.jgrid.fromstartsWith方法,以便它在特殊的方式像你需要,但只有在特殊的列(見恆"departments"在下面的代碼)

var oldFrom = $.jgrid.from; 
$.jgrid.from = function (source, initalQuery) { 
    var result = oldFrom(source, initalQuery), 
     old_startsWith = result.startsWith; 

    result.startsWith = function (f, v) { 
     if (f !== "departments") { 
      return old_startsWith.call(result, f, v); 
     } 
     var self = result, val = (v === null) ? f : v, length = val.toString().length; 
     self._append(
      'jQuery.map(' + 
       self._getStr('jQuery.jgrid.getAccessor(this,\'' + f + '\')') + 
       '.split(","),function(item) {if (item.substr(0,' + length + ')===' + 
       self._getStr('"' + self._toStr(v) + '"') + 
       ") { return item; }}).length > 0" 
     ); 
     self._setCommand(self.startsWith, f); 
     self._resetNegate(); 
     return self; 
    }; 
    return result; 
}; 

如果一個過濾字符串「D2」列「部門」一會看到以下結果

enter image description here

+0

我經歷了其他答案,但無法實現所需的功能。但上面的代碼工作就像魅力! :) 謝謝你的幫助。 – Vivek 2014-10-28 06:50:48

+0

@Vivek:不客氣! – Oleg 2014-10-28 07:02:21

+0

@Vivek:小常見評論:我發現你從來沒有使用過[投票](在答案或問題的最小部分向上箭頭鍵)。您有權每天投票最多30個答案或問題**(請參閱[此處](http://meta.stackexchange.com/a/5213))。通過投票你給搜索引擎的技巧,並幫助其他用戶的計算器找到關於計算器的信息。 *所以,如果你想要幫助其他人,你應該使用你的投票權和投票的所有信息的stackoverflow,你會發現有用和有趣的,你會推薦其他*。 – Oleg 2014-10-28 08:12:11