2012-02-22 11 views
0

メンバに9つのスパンを持つDivがあります。 3人は "aaa"クラス、3人は "bbb"クラス、3人は "ccc"クラスを持っています。形式は次のとおりです。特定のクラスを持つ要素のコンテンツとHrefを取得

<span class="aaa">aaa</span> 
    <span class="bbb"><strong>bbb</strong></span> 
    <span class="ccc"><a href="0.html">ccc</a></span> 

    <span class="aaa">aaa1</span> 
    <span class="bbb"><strong>bbb1</strong></span> 
    <span class="ccc"><a href="1.html">ccc1</a></span> 

    <span class="aaa">aaa2</span> 
    <span class="bbb"><strong>bbb2</strong></span> 
    <span class="ccc"><a href="2.html">ccc2</a></span> 

また、順序なしリストもあります。

私が望むのは、並べ替えられていないリストにリストアイテムを挿入することです。順不同リストの新しいフォーマットは次のようにする必要があります:

<ul class="container"> 
    <li> 
     <a href="0.html"> 
      aaabbb 
     </a> 
    </li> 

    <li> 
     <a href="1.html"> 
      aaa1bbb1 
     </a> 
    </li> 

    <li> 
     <a href="2.html"> 
      aaa2bbb2 
     </a> 
    </li> 
</ul> 

私のコードは以下の通りですが、それは動作しません:

http://jsfiddle.net/Tgser/

は、どのように私は上記のような順序なしリストをフォーマットすることができますか?ここで

+0

jsFiddleのコードは、何かが間違っていることを示しています...さらに、html、js、cssセクションがあり、doctypeなどを追加する必要はありません。また、jQueryライブラリを "フレームワーク " – elclanrs

+0

はい、わかります。たぶん私はHTMLセクションでJavacriptとHTMLを混ぜていたからかもしれません。あなたがNotepad ++にコピーすれば、それはうまくいくでしょう... – Bayu

+0

私はjQueryライブラリを含めました。あなたのWeb開発IDEにコード全体をコピーしてください... – Bayu

答えて

3
$(function() 
{ 
    //you can use `.filter()` to filter a list down to the elements you want, hasClass() returns true/false, not a set of elements 
    var allLatestNews = $('.source').children(), 
     span_aaa = allLatestNews.filter('.aaa'), 
     span_bbb = allLatestNews.filter('.bbb'), 
     span_ccc = allLatestNews.filter('.ccc'), 
     output = [];//this is used to add HTML to the DOM 

    //you only need to loop the number of elements in each `span_***` variable, not the total number of span elements 
    for(var i = 0; i < span_aaa.length; i++) 
    { 
     //instead of manipulating the DOM every iteration of the loop, we add the string of HTML to an array 
     output.push('<li><a href="' + span_ccc.eq(i).children().attr("href") + '">' + span_aaa.eq(i).text()+ span_bbb.eq(i).text() + span_ccc.eq(i).text() + '</a></li>'); 
    } 

    //then we append all the HTML at once 
    $('.container').append(output.join('')); 
});​ 

はデモです:http://jsfiddle.net/Tgser/5/

お知らせ<span>要素のテキストと対応するインデックス(i)のためのjQueryオブジェクトを選択するために.eq(i)の使用ではなく、使用を取得する.text()の使用対応するDOMElementを選択する[i]

+0

ありがとうございます!それは非常に複雑です – Bayu

+0

あなたの詳細な説明をありがとう。 .eq(i)と[i]の違いは分かりませんでした。 – Bayu

関連する問題