2009-09-09 37 views
0

を見つけるためのエレガントなコード、そこ次のHTML構造プロトタイプ - 次の兄弟

<div> 
    <p class="open">some txt</p> 
    <p>some text 2</p> 
    <p>some text 3</p> 
    <a href="javascript:;" onclick="down(this.parentNode)">Down</a> 
</div> 

であり、私がダウンして押したときに、私は次のpタグに「オープン」クラスを移動したい、ここで はこれを行うコードであります私はそれが最もエレガントな解決策だとは思わなかった

function down(el){ 
    el.getElementsBySelector("p.open").each(

     function(s){ 

      s.removeClassName('open'); 

      if (s.next('p')){      
       s.next('p').addClassName('open'); 
      } 
      else{ 
       el.getElementsBySelector("p:first").each(
        function(e){ 
         e.addClassName('open');      
        }  
       );  
      } 

     } 
    );  
} 

このコードはどのように改善できますか?

答えて

0

私は大丈夫ですが、あなたの質問は非常に議論の余地があると言わなければなりません。あなたの質問には明確な答えはありません。

0

私はあなたと何ができると思う:

function down(el) { 
    var currentOpenP = el.down('p.open'); 
    var nextPSibling = currentOpenP.next('p'); 
    if (nextPSibling) { 
    currentOpenP.removeClassName('open'); 
    nextPSibling.addClassName('open'); 
    } 
} 

このコードは、「開く」次の兄弟Pタグが存在するかどうかを確認し、それがない場合はクラス名を持っているあなたのel下の最初のPタグを取得しますそのclassNameを "open"に設定し、前のタグからclassNameを削除します。

0

これを試してみてください:

function down(el){ 
    var selected = el.down('p.open'); 
    el.select('p.open').invoke('removeClassName', 'open'); 

    var next = selected.next('p'); // select next p 
    if(!next) next = el.down('p'); // if next doesn't exists, use the first one 

    next.addClassName('open'); 
}  
関連する問題