2012-04-09 13 views
3

$('.mk[value=x]')が動作する必要がありますが、$('.mk[value=1]')は動作しません。 誰かがあなたが文字列にx変数を追加する必要がありセレクタ内のjQuery変数

<body> 
<span class="mk" value="1">1</span> 
<span class="mk" value="1">1</span> 
<span class="mk" value="3">3</span> 
<input id="update" type="button" value="1" /> 
</body> 

<script type="text/javascript"> 
$('#update').click(function(){ 
    var x = this.value //--> x =1 
     $('.mk[value=x]').each(function(key, value) { //--> NOT WORKING ! 
     $('.mk[value=1]').each(function(key, value) { //--> WORKING ! 
     $(this).replaceWith('<span class="mk" value="2">2</span>') 
     }); 
    }) 
</script> 

答えて

7

を助けてください:

$(".mk[value='" + x + "']").each(function(key, value) 

また、あなたはvaluespanの有効な属性ではありませんので、このコードが検証の原因となることに注意すべきです問題。

+0

+1セレクタ内の属性値を引用するために(の代わりに_right_)使用します。 –

+0

@MДΓΓLLLLLL:単純な属性値の引用符は必要ありません。 –

+1

@amnotiam彼らは必須ではないかもしれませんが、彼らは良い練習IMOです。 –

1

その方法を試してみてください:

$('.mk[value='+x+']') 
0

変更この

$('.mk[value=x]') 

あなたは、このような選択文字列にあなたの価値を置く必要があります。

$('#update').click(function(){ 
var x = this.value 
$(".mk[value='" + x + "']").each(function(key, value) { 
    this.replaceWith('<span class="mk" value="2">2</span>') 
}); 
}) 
0

$('.mk[value='+x+']').each(
1

あなたが

$('.mk[value='+ x +']').each(function(key, value) 

かは、あなたがそこにフィルタリング

$('.mk').each(function(key, value) { 
     if (this.value === x) { 
      this.replaceWith('<span class="mk" value="2">2</span>'); 
     } 
    }); 
}) 
を行うことができます .filter()

$('.mk').filter(function(){return this.value === x;}).each(function(key, value) 

を使用するか、すでにそれらにeachを使用するので、それを文字列に連結するいずれかの必要があります

1

なぜそうするのか動作しないのは、'.mk[value=x]'が標準の文字列であり、解析されないということです。

セレクタを'.mk[value=' + x + ']'に変更すると、xが変数の値に置き換えられます。

関連する問題