Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 排序a';可手持';然后能够从表中读取数据_Javascript_Jquery_Handsontable - Fatal编程技术网

Javascript 排序a';可手持';然后能够从表中读取数据

Javascript 排序a';可手持';然后能够从表中读取数据,javascript,jquery,handsontable,Javascript,Jquery,Handsontable,我希望能够对一个handsontable进行排序,然后能够从表中读取数据。我已经拼凑了这段代码,这段代码很有效,但似乎有更好的方法对屏幕上的数据进行排序,然后能够按排序的顺序提取数据 这个javascript插件似乎针对快速屏幕操作进行了优化。“仅对表视图进行排序。数据源保持原始顺序。”要同时对表视图和数据源进行排序,似乎必须同时执行或数据源操作,然后重新应用 参考资料: 文档建议我们使用sort和render函数,但我们仍然需要处理排序顺序问题 文件: $(文档).ready(函数(){

我希望能够对一个handsontable进行排序,然后能够从表中读取数据。我已经拼凑了这段代码,这段代码很有效,但似乎有更好的方法对屏幕上的数据进行排序,然后能够按排序的顺序提取数据


这个javascript插件似乎针对快速屏幕操作进行了优化。“仅对表视图进行排序。数据源保持原始顺序。”要同时对表视图和数据源进行排序,似乎必须同时执行或数据源操作,然后重新应用

参考资料:

文档建议我们使用sort和render函数,但我们仍然需要处理排序顺序问题

文件:


$(文档).ready(函数(){
var-sortCol=0;
var-mysort方向;
var myArrayOfArrays=[
[66,'AA',1],
[55,'BB',3],
[44,'CC',2]
];
// ----------------------------------------------------
//手持台设置
// ----------------------------------------------------
$('exampleGrid')。可手持({
资料:myArrayOfArrays,
会议记录:1,
colHeaders:是的,
上下文菜单:正确,
是的,
//使用特殊侦听器获取列号,然后对基础数组进行排序,因为这不是默认行为。
afterOnCellMouseDown:函数(更改,源){
如果(源['row']=-1){
sortCol=源['col'];
//获取当前排序方向
mySortDirection=sortDirection($('#exampleGrid')。可手持('getInstance');
var myTableData=$('#exampleGrid').handsontable('getData');
//使用custome回调执行排序
myArrayOfArrays=myArrayOfArrays.sort(fnSortingFunction);
//$(“#示例网格”).handsontable('render');
//将原始数组的内容显示回屏幕
$('#textOut').html(“”);
fnShowArray(myArrayOfArrays);
}
}
});//结束可手持的定义
// ----------------------------------------------------
//排序函数-回调
// ----------------------------------------------------
函数fnsorting函数(a,b){
如果(mySortDirection===‘升序’){
if(a[sortCol]b[sortCol])返回1;
}
否则{
如果(a[sortCol]b[sortCol])返回-1;
}
返回0;
}   
// ----------------------------------------------------
//确定排序的方式:修复bug?
// ----------------------------------------------------
函数sortDirection(此表){
if(thisTable.sortingEnabled&&typeof thisTable.sortColumn!=“未定义”){
//如果sortOrder===false,则顺序为降序,因此将其设为升序
如果(thisTable.sortOrder==false){
thisTable.sortOrder=true;
返回“升序”;
}
否则{
thisTable.sortOrder=false;
返回“下降”;
}
}
否则{
thisTable.sortOrder=true;
返回“升序”;
}
};
// ----------------------------------------------------
//将数组内容显示回屏幕
// ----------------------------------------------------
函数fnShowArray(myArrayofArrays){
$('#textOut')。追加(“
转储表数据:
”); $.each(MyArrayOfarray,函数(index1,myRow){ $.each(myRow,function(index2,myCell){ $('#textOut')。追加(myCell+“-”); }); $('#textOut')。追加(
); }); }; })//结束jquery
为什么不从数组中读取数据,而不是从数组中读取数据?此javascript插件似乎针对快速屏幕操作进行了优化。“仅对表视图进行排序。数据源保持原始顺序。”要同时对表视图和数据源进行排序,您似乎必须同时执行或执行数据源排序,然后重新应用。排序数组比从html表中提取数据容易得多,感谢您的输入!在我的示例中,在对hansontable html表进行排序之后,我使用myArrayOfArrays.sort(fnSortingFunction)对数据源数组进行排序
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
    <script src="../jquery/jquery.js" type="text/javascript"></script>     
    <script src="../handsontable/dist/jquery.handsontable.full.js"></script>
    <link rel="stylesheet" media="screen" href="../handsontable/dist/jquery.handsontable.full.css">
    <script type="text/javascript">


    $( document ).ready(function() {

        var sortCol = 0;
        var mySortDirection;

        var myArrayOfArrays = [         
            [66,'AA',1],
            [55,'BB',3],
            [44,'CC',2]
        ];

        // ----------------------------------------------------
        // HandsTable Setup
        // ----------------------------------------------------
        $('#exampleGrid').handsontable({
            data: myArrayOfArrays,
            minSpareRows: 1,
            colHeaders: true,
            contextMenu: true,          
            columnSorting: true,

            // use special listener to get column number, then sort underlying array as this is not default behaviour.          
            afterOnCellMouseDown: function (changes, source) {
                if (source['row'] === -1) { 
                    sortCol = source['col'];                    
                    // get current sort direction
                    mySortDirection =  sortDirection($('#exampleGrid').handsontable('getInstance'));
                    var myTableData = $('#exampleGrid').handsontable('getData');                    
                    // perform sort with custome callback
                    myArrayOfArrays = myArrayOfArrays.sort(fnSortingFunction);
                    // $('#exampleGrid').handsontable('render'); 
                    // display content of original array back to to screen
                    $('#textOut').html("");
                    fnShowArray(myArrayOfArrays);
                }
            }
        });  // end handsontable definition


        // ----------------------------------------------------
        // Sort function - callback
        // ----------------------------------------------------
        function fnSortingFunction(a,b) {           
            if (mySortDirection === 'Ascending'){
                if (a[sortCol] < b[sortCol]) return -1;
                if (a[sortCol] > b[sortCol]) return 1;
            }
            else{
                if (a[sortCol] < b[sortCol]) return 1;
                if (a[sortCol] > b[sortCol]) return -1;         
            }
            return 0;
        }   

        // ----------------------------------------------------
        // Determine which way to sort, TO DO: fix bugs?
        // ----------------------------------------------------
        function sortDirection(thisTable){      
            if (thisTable.sortingEnabled && typeof thisTable.sortColumn != 'undefined') {
                //if sortOrder === false, the order is descending, so make it ascending
                if(thisTable.sortOrder === false){ 
                    thisTable.sortOrder = true;
                    return "Ascending";
                }
                else{
                    thisTable.sortOrder = false;
                    return "Descending";
                }
            }
            else{               
                thisTable.sortOrder = true;
                return "Ascending";
            }
        };

        // ----------------------------------------------------
        // Show content of array back to Screen
        // ----------------------------------------------------
        function fnShowArray(myArrayofArrays){          
            $('#textOut').append("<br/><b>Dump Table Data: </b><br/>");
            $.each( myArrayofArrays, function( index1, myRow ) {                                            
                $.each( myRow, function( index2, myCell ) {                                         
                    $('#textOut').append(myCell + " - " );
                });
                $('#textOut').append("<br/>");
            });
        };

    }) // end jquery

</script>   

<div id="exampleGrid" class="dataTable"></div>
<div id="textOut" ></div>