2016-09-09 7 views
0

私はこの問題の解決に多くの時間を費やしてくれたことに本当に感謝しています。私は、Webページ上の要素から作成されたjQueryオブジェクトを持っている:jquery to json problems

var get_article = $('title, p, img');

私はこれをにconsole.logとき、私は要素とそのインデックス値の素敵な、きれいなリストを取得します。私がしたいのは、各要素をインデックス値と内容と共にjsonオブジェクトに追加することです。私はJSONオブジェクト(物品)CONSOLE.LOG場合JSONオブジェクト(記事)のノード値がすべて終わった以外は、すべてのデータが正確である

article = new Array(); 
 

 
$.each(get_article, function(){ 
 
    $('title').each(function() { 
 
    var title_items = { 
 
     node: $(this).index(''), 
 
     html_element: "title", 
 
     content: $(this).text() 
 
    }; 
 
    article.push(JSON.stringify(title_items)); 
 
    }); 
 
    $('p').each(function() { 
 
    var p_items = { 
 
     node: $(this).index(''), 
 
     html_element: "p", 
 
     content: $(this).text() 
 
    }; 
 
    article.push(JSON.stringify(p_items)); 
 
    }); 
 
    
 
    $('img').each(function() { 
 
    var img_items = { 
 
     node: $(this).index(''), 
 
     html_element: "img", 
 
     content: $(this).attr("src") 
 
    }; 
 
    article.push(JSON.stringify(img_items)); 
 
    }); 
 
});

:私はこれを試みました場所とそれらは元のjqueryオブジェクト(get_article)のインデックス値と同じを表示しません。また、データ自体が繰り返し始めるので、元のjqueryオブジェクト(get_article)よりも多くのノードがあります。助けてください!

ご協力いただきありがとうございます。私はこのコードを使って問題を解決することができました。あなたの反応を見ると、私は別の方法を試す必要があることがわかりました。これは私のために働いていたものです:あなたが実際にあなたのコード内の任意の場所にget_articleを使用していない

for (i = 0; i < get_article.length; i++) { 
 
    if ($(get_article[i]).is('title')) { 
 
    var title_items = { 
 
\t node: \t \t i, 
 
\t html_element: \t "title", 
 
\t content: \t $(get_article[i]).text() 
 
}; 
 
article.push(JSON.stringify(title_items)); 
 
} 
 
    if ($(get_article[i]).is('p')) { 
 
    var p_items = { 
 
\t node: \t \t i, 
 
\t html_element: \t "p", 
 
\t content: \t $(get_article[i]).text() 
 
}; 
 
article.push(JSON.stringify(p_items)); 
 
} 
 
    if ($(get_article[i]).is('img')) { 
 
    var img_items = { 
 
\t node: \t \t i, 
 
\t html_element: \t "img", 
 
\t content: \t $(get_article[i]).attr("src") 
 
}; 
 
article.push(JSON.stringify(img_items)); 
 
} 
 
};

+2

入力値のサンプルとそれらの入力値のJSON出力を指定してください。 – jwpfox

+0

私は.mapを使用します。 –

+0

要望どおり、jwpfoxの詳細をいくつか追加しました。この例では、.map関数をどのように使用するかの例をKevinBに教えてください。皆さんの助けに本当に感謝しています。 – mcinteemasud

答えて

1

$.each(get_article, function(){ 
    $('title').each(function() { 
     var title_items = { 
      // ... 
     }; 
     article.push(JSON.stringify(title_items)); 
    }); 
    // .... 
}); 

$('title').each(function() { 
    var title_items = { 
     // ... 
    }; 
    article.push(JSON.stringify(title_items)); 
}); 

とまったく同じであるそれはあなたが十分な詳細情報を提供していないので、確かに言うのは難しいですが、おそらく何をしたいことのようなものです:

$.each(get_article, function(){ 
    $(this).find('title').each(function() { 
     var title_items = { 
      // ... 
     }; 
     article.push(JSON.stringify(title_items)); 
    }); 
    // .... 
}); 

しかし、それでもコンソールに単にロギングするのとまったく同じ効果は期待できません。要素の順序は、コード内で最初にすべてのタイトルを取得してから、すべての段落を、次にすべての画像を取得するために異なります。 jQueryの出力をconsole.logにすると、その要素を型ごとに分離するのではなく、単純にDOMの順序で要素を表示します。

例えば、DOMは、タイトル1

  • 項1つの
  • 表題2
  • コンソール

    • 有する場合。表示されるログ

      1. 表題1
      2. 項1
      3. 表題2

      (固定)コードが表示されている間

      1. 表題1
      2. 表題2
      3. 段落1
    +0

    あなたは正しいです、私のコードは型によって要素を分離していますが、正しいDOMの順序でそれらを取得したいと思います。 (get_article [i] .hasTagName( 'p')){...私はそれを以前に試したことがありましたが、それを試したことがありませんでした(i = 0; i mcinteemasud