做一個用easyui的datagrid顯示數據的功能時發現表格的列頭與數據錯位了,而且這個現象不總是能重現,一直沒搞清楚原因。后來偶然在控制台看出了一點端倪:
推測表頭或者單元格的class名應該是用字段名拼出來的,如果含有特殊字符可能違反了css的命名規則(權威的css命名規則暫時沒有找到,這篇文章稍有提到)。
我找了個有特殊字符的列的數據,發現果然歪了。驗證了想法。
由於項目的特殊性,數據庫的表是動態創建的,也就是部分列名是由用戶輸入的,比較隨意(當然,列頭是另外是有顯示名稱的)。
所以這個問題可以從兩方面解決:
①對用戶輸入進行限制。
②找到easyui拼接class名稱的地方,處理掉特殊字符。(最后也確實在jquery.easyui.min.js里找到了)
其實easyui作者也對列名進行了一定的處理,只是沒有考慮到這里的特殊情況。所以修改這個正則表達式就可以了(這里就不貼修改后的正則表達式了),或者限制用戶輸入與修改個正則表達式相結合。
后來看到這篇jQuery EasyUI datagrid列名包含特殊字符會導致表格錯位里也提到了這個問題的處理方法,覺得作者的這個辦法很好,將字符替換為十六進制碼
...field.replace(/[\.|\s]/g, "-").replace(/./g,function($1){return $1.charCodeAt(0).toString(16);});