我在我的应用程序中使用了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, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"');
}
发布于 2012-04-23 23:36:03
dataTables确实存在一个bug,它会导致任何特殊字符的问题,所以您必须避开它们。
注意:我添加了XRegExp作为转义的另一个资源。http://xregexp.com/
发布于 2012-04-28 05:40:31
试试这个:
$(document).ready(function() {
$('#results').dataTable();
$("#filter_col_1").change( function() {
$('#results').dataTable().fnFilter(
'\\b' + htmlEntities($('#filter_col_1').val()) + '\\b',
0,
true,
false
);
} );
});
function htmlEntities(str) {
return String(str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
}
发布于 2012-04-23 05:02:41
尝尝这个
$('#results').dataTable().fnFilter(
$("#filter_col_1").val(),
null,
true
);
将其设置为对所有列进行筛选,立即生效...
https://stackoverflow.com/questions/8962316
复制相似问题