2011-02-07 9 views
1

良い古いJavaScriptを使用してこれを行う方法は知っていますが、コードを減らしてjQueryの理解を深めるために、ここに '問題があります:JQueryの.eachを使用してフォームアイテムをループし、srcを.replaceで変更する

私はすべてがSRC属性を含む画像と入力のコレクションを持っていますが、これらはすべて#popupFormという親DIVに含まれています。 .eachメソッドを使用してフォームアイテムをループしたい(スタイリング用の子DIVにあるものもあれば、一部は文字列の一致に応じてSRCの一部を置き換える) - 私はこれをやりたいのですが、私は数多くのテーマを持つサイトを持っています。ここに私がこれまで持っていたものがあります。

var thisTheme = $("hiddenTheme").val(); // this is a theme variable 
var $inputs = $('#popupForm :input'); // need to later add images here too 

$inputs.children().each(function() { 
$this.attr("src") = $this.attr("src").replace('whatIwantToReplace', thisTheme); 
}); 

これはかなり単純です。どんな助けもありがとうございます。


更新


が、これはすべての次

// theming script 
var thisTheme = $("#hiddenTheme").val(); 
var defaultTheme = "/midway/" 

$('#popupForm img').each(function() { 

    var thisSRC = $(this).attr('src'); 
    if (thisSRC.indexOf(defaultTheme) !== -1) { 

     var new_src = $(this).attr('src').replace(defaultTheme, thisTheme); 
     $(this).attr('src', new_src); 

    } 

}); 

答えて

1
var thisTheme = $("hiddenTheme").val(); // this is a theme variable 
var $inputs = $('#popupForm :input'); // need to later add images here too 

$inputs.children().each(function() { 
var new_src = $this.attr("src").replace('whatIwantToReplace', thisTheme); 
$(this).attr('src', new_src); 
}); 
+0

... – lonesomeday

+0

@lonesomeday:

最後に、コードが完全にeachループを避け、このように、よりきれいに書き直すことができると彼と彼:D "何かをする"に編集:D @Mike Sav:今すぐお試しください:) – Shrinath

+0

この作品は次のコードで入手しました –

1

まず、$thisここでは何も意味しないと動作するようになった - 作者の多くが使用されますを呼び出さないように、$(this)の値を格納する$this jQuery関数を何度も使用していますが、実際にはそれを使用できるように$this = $(this)を設定する必要があります。それを設定しないと、エラーがスローされるはずです。

は、input要素が子を持つことができず、src属性も持つことができないため、奇妙に見えます。

実際にタグ名がhiddenThemeの要素がない限り、入力要素の値の選択に使用されるセレクタの意味は#hiddenThemeだと思います。

文字列を返しますし、それを何もしません
var thisTheme = $("#hiddenTheme").val(); 

$('#popupForm img').attr('src', function(index, value){ 
    return value.replace('whatIWantToReplace', thisTheme); 
}); 
+0

+1私の優れた優れた答え。 – lonesomeday

+0

しかし、私はこのFirebugで私のコードを切り替えると、私にエラーが発生します: 値は定義されていません [Break On This Error] return value.replace( 'whatIWantToReplace'、thisTheme); }); –

+0

@MikeSav答えを見て、私はあなたが作った間違いについてここで特定の仮定をしています、これらの仮定は正しいですか? –

関連する問題