数据表从具有输入的单元格获取值

时间:2015-08-25 23:16:28

标签: jquery datatables filtering

好的,我正在尝试构建自定义搜索,在我的数据表中,当我尝试过滤其中包含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获取价值

2 个答案:

答案 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;
    }
}