我在应用程序中使用jQuery DataTables插件,并且我的许多表行和过滤器都有特殊字符,特别是与符号(&)。当我尝试过滤这些列时,所有记录都会消失,并且显示“找不到匹配的记录”。

在将字符串打印到页面上之前,我曾尝试对其进行编码(即htmlspecialchars)和解码(即htmlspecialchars_decode),但似乎都无法正常工作。

示例:http://jsfiddle.net/gkdcZ/3/

有什么想法可能会发生这种情况,以及我该如何解决?

HTML:

<select id="filter_col_1" name="filter_col_1">
    <option value="">Select</option>
    <option value="A&B">A&B</option>
    <option value="C">C</option>
    <option value="D">D</option>
</select>

<tr>
    <td>A&B</td>
    <td>Jones, Brandon</td>
    <td>01/02/2003</td>
</tr>

JavaScript:
$("#filter_col_1").change( function() {
    $('#results').dataTable().fnFilter(
        '\\b' + $("#filter_col_1").val() + '\\b',
        1,
        true,
        false
    );
} );

更新#1:
仅在您限制列时才会出现问题。参见DataTables API。当参数设置为“null”时,效果很好。 http://jsfiddle.net/gkdcZ/4/

更新2:
靠近一点添加用于替换HTML实体的函数可用于某些字符(例如,“&”号),但不适用于其他字符(即,感叹号和问号)。参见http://jsfiddle.net/cz6Bs/4/
'\\b' + htmlEntities($('#filter_col_1').val()) + '\\b'

function htmlEntities(str) {
return String(str).replace(/&/g, '&amp;')
                  .replace(/</g, '&lt;')
                  .replace(/>/g,     '&gt;')
                  .replace(/"/g, '&quot;');
}

最佳答案

dataTables确实存在一个错误,该错误会导致任何特殊字符出现问题,因此您必须对其进行转义。

http://jsfiddle.net/cz6Bs/

注意:我添加了XRegExp作为转义的另一个资源。
http://xregexp.com/

10-06 05:29
查看更多