好的,我正在尝试构建自定义搜索,在我的数据表中,当我尝试过滤其中包含select
的列时,我遇到了问题。
当我使用具有下一语法的列11
进行过滤时,问题就开始了:
<select>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5" selected="">5</option>
</select>
我使用下一个函数来构建自定义过滤器:
$.fn.dataTable.ext.search.push(
function ( settings, data, dataIndex) {
dataFromFormat = getDataFromFormat( data[11] ); //return 1 2 3 4 5
stringLike( dataFromFormat, $('#customSearch').val() )
}
);
function stringLike(string, substring){
if (string.indexOf(substring) !== -1) return true
else return false;
}
function getDataFromFormat(datavalue){
console.log(datavalue);
if ( $(datavalue).is('a') ){
console.log('a');
return $(datavalue).text();
} else if ( $(datavalue).is('input') ){
console.log('input');
return $(datavalue).val();
} else if ( $(datavalue).is('select') ){
console.log('select');
return $(datavalue).val();
} else {
console.log('only text'); //enter here, because data[11] doesn't have the select syntax only the text contained in it (1 2 3 4 5)
return datavalue;
}
}
但是每当它返回时我检查data[11]
中的内容:
1 2 3 4 5
只有文本内容,而不是HTML标记,什么都没有,它应该返回select
本身,因为这是第11列的真实内容。
如何获取真实内容,或者如何从select
获取价值
答案 0 :(得分:1)
如果只想提取在输入框中输入的值,则必须使用jQuery或本机DOM。 dataTables本身不知道对表单输入字段所做的任何更改,因此,无论是否带有ID或正交数据,尝试通过cell()。data()检索值都将无效:
aTable.cell(0,2).nodes()。to $()。find('input')。val()
aTable.cell(0,3).nodes()。to $()。find('input')。val()
将为您提供各种输入的当前值。在这个小提琴中100%复制了您的上述情况->
http://jsfiddle.net/obmghyo7/
基本上,这也是官方文档建议的一种从表单输入中提取值的方法->
https://datatables.net/examples/api/form.html
如果要在表中执行过滤/搜索(其中还包括用户在表单输入中所做的更改),则要棘手一些-> JQuery Datatables在输入中进行搜索并选择(我的,但我不知道任何更好的答案)
答案 1 :(得分:0)
在您的代码中,您在两个return $(datavalue).val();
语句中使用else if
。这将从value
返回select
,这就是1 2 3 4 5
的原因,因为这些是您的选择的值(例如value=1
)。
我不确定您选择的内容是什么,但您应该可以使用return $(datavalue).text();
或return $(datavalue).html();
function getDataFromFormat(datavalue){
console.log(datavalue);
if ( $(datavalue).is('a') ){
console.log('a');
return $(datavalue).text();
} else if ( $(datavalue).is('input') ){
console.log('input');
return $(datavalue).text();
} else if ( $(datavalue).is('select') ){
console.log('select');
return $(datavalue).text();
} else {
console.log('only text'); //enter here, because data[11] doesn't have the select syntax only the text contained in it (1 2 3 4 5)
return datavalue;
}
}
OR
function getDataFromFormat(datavalue){
console.log(datavalue);
if ( $(datavalue).is('a') ){
console.log('a');
return $(datavalue).text();
} else if ( $(datavalue).is('input') ){
console.log('input');
return $(datavalue).html();
} else if ( $(datavalue).is('select') ){
console.log('select');
return $(datavalue).html();
} else {
console.log('only text'); //enter here, because data[11] doesn't have the select syntax only the text contained in it (1 2 3 4 5)
return datavalue;
}
}