首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用jQuery DataTables插件过滤带有特殊字符的结果?

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

Stack Overflow用户
提问于 2012-01-22 23:50:29
回答 3查看 9.1K关注 0票数 16

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

我尝试过在字符串打印到页面之前对它们进行编码(即htmlspecialchars)和解码(即htmlspecialchars_decode),但似乎都不起作用。

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

你知道为什么会发生这种情况,以及我如何修复它吗?

HTML:

代码语言:javascript
复制
<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:

代码语言: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/

代码语言:javascript
复制
'\\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;');
}
EN

回答 3

Stack Overflow用户

发布于 2012-04-23 23:36:03

dataTables确实存在一个bug,它会导致任何特殊字符的问题,所以您必须避开它们。

http://jsfiddle.net/cz6Bs/

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

票数 6
EN

Stack Overflow用户

发布于 2012-04-28 05:40:31

试试这个:

代码语言:javascript
复制
$(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;');
}
票数 3
EN

Stack Overflow用户

发布于 2012-04-23 05:02:41

尝尝这个

代码语言:javascript
复制
 $('#results').dataTable().fnFilter(
        $("#filter_col_1").val(),
        null,
        true
    );

将其设置为对所有列进行筛选,立即生效...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8962316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档