如何使用jQuery DataTables插件过滤特殊字符的结果?

时间:2012-01-22 15:50:29

标签: php jquery special-characters datatables html-entities

我在我的应用程序中使用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;');
}

3 个答案:

答案 0 :(得分:6)

dataTables确实存在一个错误,导致任何特殊字符出现问题,因此您必须将它们转义。

http://jsfiddle.net/cz6Bs/

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

答案 1 :(得分:3)

试试这个:

$(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, '&amp;').replace(/</g, '&lt;').replace(/>/g,     '&gt;').replace(/"/g, '&quot;');
}

答案 2 :(得分:1)

试试这个

 $('#results').dataTable().fnFilter(
        $("#filter_col_1").val(),
        null,
        true
    );

将其设置为对所有列进行过滤,现在可以正常工作......