2012-04-09 10 views
3

Ich brauche $('.mk[value=x]') zu arbeiten, aber es tut nicht, während $('.mk[value=1]') tut. Bitte jemand helfenjQuery Variable in einem Selektor

<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> 

Antwort

7

Sie benötigen die x Variable an die Zeichenfolge angefügt werden:

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

Außerdem sollten Sie beachten, dass value ist kein gültiges Attribut span, sodass dieser Code wird Validierung verursachen Probleme.

+0

+1 für (abgesehen davon, dass _right_ ist), indem der Attributwert im Selektor angegeben wird. –

+0

@ MдΓΓБДLL: Anführungszeichen für einfache Attributwerte sind nicht erforderlich. –

+1

@amnotiam sie sind nicht erforderlich, aber sie sind eine gute Praxis IMO. –

1

versuchen auf diese Weise:

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

Änderung dieser

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

zu

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

Sie benötigen Wert in die Auswahl Zeichenfolge wie folgt setzen:

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

Sie müssen entweder auf das

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

oder .filter()

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

oder da Sie bereits each auf sie verwenden, verwenden String verketten Sie die Filterung dort

$('.mk').each(function(key, value) { 
     if (this.value === x) { 
      this.replaceWith('<span class="mk" value="2">2</span>'); 
     } 
    }); 
}) 
tun können
1

Der Grund, warum es tut nicht funktionieren ist, dass '.mk[value=x]' ist ein Standard-String und es wird nicht geparst.

Versuchen Sie, den Selektor auf '.mk[value=' + x + ']' zu ändern, und x wird durch den Wert der Variablen ersetzt.