2016-04-13 13 views
0
<ul id="source"> 
    <li>北京空气质量:<b>90</b></li> 
    <li>上海空气质量:<b>70</b></li> 
    <li>天津空气质量:<b>80</b></li> 
    <li>广州空气质量:<b>50</b></li> 
    <li>深圳空气质量:<b>40</b></li> 
    <li>福州空气质量:<b>32</b></li> 
    <li>成都空气质量:<b>90</b></li> 
</ul> 

私の目標は、htmlファイルの<ul>...</ul>から情報を取得することです。データ形式は次のようになります。[["北京",90],["上海",70],.....]配列の配列は最初の要素が中国語テキストの部分文字列で、2番目の要素が数字です。この上のjQueryを使用してのjQueryオブジェクトの配列のマッピングが機能していませんか?

私の考えは、それは["", "", "", "", "", "", "", "", "", "", "", "", "", ""]を返さ

function getData() { 
    /* 
    coding here 
    */ 
    var sourceData = $("#source").find("li"); 
    /* 
    data = [ 
    ["北京", 90], 
    ["北京", 90] 
    …… 
    ] 
    */ 

    return sourceData.map(function (item) { 
     return [$(item).text().substring(0,2),$(item).find("b").text()]; 
    }); 

です。

私はそれが間違っていたところで試験を始めました。まず、このようなjQueryを使わずに試しました。

function getData() { 
var rowData = document.getElementById("source").getElementsByTagName("li"); 
var sourceData = [].slice.apply(rowData); 
sourceData.map(function (item) { 
     return [$(item).text().substring(0, 2), $(item).find("b").text()]; 
    }); 

となりました。だから私は試験を始めました

var sourceData = $("#source").find("li"); 
sourceData.map(item => item); 

そして戻り値は[0, 1, 2, 3, 4, 5, 6]でした。私は多分var sourceData = $("#source").find("li");のリターンは、私は混乱しているArrayしかし

> sourceData.__proto__ 
< [] 

ないと思いました。誰でも助けることができますか?ありがとう!

+2

出力期待されていますか? – Tushar

+0

詳しい説明は、/ –

+2

に変更してください。 'sourceData.toArray()。map'を返します。 –

答えて

1

jQueryのドキュメントhttp://api.jquery.com/map/によると、map関数のコールバックは、ネイティブESアレイマップと少し異なっています。以下のようにコールバック引数の説明:

Type: Function(Integer index, Element domElement) => Object 
A function object that will be invoked for each element in the current set 

だから次のようにあなたのgetData機能を変更します。

return sourceData.map(function (index, item) { 
    return [$(item).text().substring(0,2),$(item).find("b").text()]; 
}); 
+0

しかし、プロトタイプは '[]'ですか? 'sourceData'が配列で' map() 'がネイティブでなければならないのではないでしょうか? – user3928256

+0

はい、jQueryはすでにjQueryオブジェクトのネイティブマップをオーバーライドしています。 –

+0

ああ、ありがとうございます:)。 – user3928256

0

このスクリプトが動作するようです:

function getData() { 

    var sourceData = []; 
    $("#source li").each(function(){ 
     var li_text = $(this).text(); 
     li_text = li_text.split(":"); 
     var sData = [li_text[0].substring(0,2),li_text[1]]; 
     sourceData.push(sData); 
    }); 
    return sourceData; 

} 

fiddle

+0

ありがとうございます。しかし、@ R Lamのコメントは私が探しているものです。 :) – user3928256

関連する問題