2011-10-26 12 views
0

DOM内にアンカーがあり、次のコードではこれをファンシーボタンに置​​き換えます。これはうまくいきますが、もっとたくさんのボタンが必要な場合はクラッシュします。 for-loopなしでそれを行うことはできますか?いくつかの要素の問題を伴うJQuery

$(document).ready(buttonize); 

function buttonize(){ 
    //alert(buttonAmount); 

    //Lookup for the classes 
    var button    = $('a.makeabutton'); 
    var buttonContent  = button.text(); 
    var buttonStyle   = button.attr('class'); 
    var link    = button.attr('href'); 
    var linkTarget   = button.attr('target'); 
    var toSearchFor   = 'makeabutton'; 
    var toReplaceWith  = 'buttonize'; 
    var searchButtonStyle = buttonStyle.search(toSearchFor); 


    if (searchButtonStyle != -1) {  

     //When class 'makeabutton' is found in string, build the new classname 
     newButtonStyle  = buttonStyle.replace(toSearchFor, toReplaceWith); 
     button.replaceWith('<span class="'+newButtonStyle 
       +'"><span class="left"></span><span class="body">' 
       +buttonContent+'</span><span class="right"></span></span>'); 

     $('.buttonize').click(function(e){ 
      if (linkTarget == '_blank') { 
      window.open(link); 
      } 
      else window.location = link; 
     }); 
    } 
} 
+0

どのようにクラッシュしますか? –

+1

'$( 'a.makeabutton')'、要素のコレクションを返す 'button.each(機能を...)を使用し、' – Ibu

+0

DOMは次のようになります。クラスは色のある \t

\t \t \t \t Buttonized! \t \t
\t \t Buttonized! \t \t
\t \t Buttonized! \t \t
\t \t Buttonized! \t \t
\t \t \t
、およびスクリプトはそれを最初の要素からの値で置き換えます。 – user980018

答えて

0

はインクルード各メソッドは、すべての要素をループ

var button    = $('a.makeabutton'); 
button.each(function() { 
    var btn = $(this); 
    var buttonContent  = btn.text(); 
    var buttonStyle   = btn.attr('class'); 
    var link    = btn.attr('href'); 
    var linkTarget   = btn.attr('target'); 
    var toSearchFor   = 'makeabutton'; 
    var toReplaceWith  = 'buttonize'; 
    var searchButtonStyle = buttonStyle.search(toSearchFor); 
    ... 
}; 

あなたは要素のコレクションを取得しているため、各メソッドを使用します(たとえそのわずか1)

ループ内の現在の要素を参照するために thisキーワードを使用できます

+0

yay! thanks デモ: http://preview.miriam-schwarz.com/buttons/ http://preview.miriam-schwarz.com/buttons/demo.html – user980018

0
var button    = $('a.makeabutton'); 

このコードは、一致するすべてのアンカーが含まれているjQueryオブジェクトを返します。あなたは.eachを使用してそれらを介してループする必要があります。

$(document).ready(buttonize); 

function buttonize() { 
    //alert(buttonAmount); 
    //Lookup for the classes 
    var $buttons = $('a.makeabutton'); 
    $buttons.each(function() { 
     var button = $(this); 
     var buttonContent = button.text(); 
     var buttonStyle = button.attr('class'); 
     var link = button.attr('href'); 
     var linkTarget = button.attr('target'); 
     var toSearchFor = 'makeabutton'; 
     var toReplaceWith = 'buttonize'; 
     var searchButtonStyle = buttonStyle.search(toSearchFor); 


     if (searchButtonStyle != -1) { 

      newButtonStyle = buttonStyle.replace(toSearchFor, toReplaceWith); 
      button.replaceWith('<span class="' 
           + newButtonStyle 
           + '"><span class="left"></span><span class="body">' 
           + buttonContent 
           + '</span><span class="right"></span></span>'); 

      $('.buttonize').click(function(e) { 
       if (linkTarget == '_blank') { 
        window.open(link); 
       } else window.location = link; 
      }); // end click 
     } // end if 

    }); // end each 
} 
関連する問題