2016-06-17 51 views
0

我使用MediaWiki API從維基上的表中獲取文本信息,因此可將其設置爲每行的數據集。我能夠讓表格顯示(使用行/列)在HTML上,但我不知道如何將數據設置爲本地數組或其他類型的數據集。
的代碼如下:JS MediaWiki API本地訪問已解析的行

$(document).ready(function(){ 
$.ajax({ 
    type: "GET", 
    url: "http://wiki.teamliquid.net/smash/api.php?action=parse&format=json&prop=text&section=0&pageid=4887&callback=?", 
    contentType: "application/json; charset=utf-8", 
    async: false, 
    dataType: "json", 
    success: function (data, textStatus, jqXHR) { 
    var markup = data.parse.text["*"]; 
    var i = $('<tbody></tbody>').html(markup); 

    // remove any references 
    i.find('sup').remove(); 

    i.find('img').remove(); //remove images 
    i.find('a').each(function() {$(this).replaceWith($(this).html()); }); //remove links 

    x = $('#article').html($(i).find('tr')); //find all rows 
    //console.log(x.parse.text.tr); 
    }, 
    error: function (errorMessage) { 
    } 
}); 
}); 

回答

0

首先,我會建議使用頁面= All_Tournaments,而不是設置的pageid。 注意,如果這個代碼是內部鏈接到MediaWiki運行,你可以做這樣的事情,而不是$阿賈克斯/ $得到:

new mw.Api().get({ 
    action: 'parse', 
    prop: 'text', 
    section: 0, 
    page: 'All Tournaments' 
}).done(function (data) { 
    // ... 
}); 

(注意這個異步運行的回調函數的內容)

但到你的問題:

var tables = []; 
$(i).find('table').each(function (tableId, tableEle) { 
    var tableObjs = [], headers = []; 
    $(tableEle).find('th').each(function (i, th) { 
     headers[ i ] = $(th).text().trim(); 
    }); 

    $i.find('tr').each(function (rowId, rowEle) { 
     var row = {}; 
     $(rowEle).find('td').each(function (i, tdEle) { 
      row[ headers[ i ] ] = $(tdEle).text().trim(); 
     }); 
     tableObjs[ rowId - 1 ] = row; 
    }); 
    tables.push(tableObjs); 
}); 
console.log(tables); 

這將產生一個對象數組數組。外部數組是表格的列表,每個項目是該表格中所有行的數組,每個項目都是一個對象,其中鍵是數據所在的標題,值是修剪後的文本內容數據。