2012-04-09 117 views
3

我需要$('.mk[value=x]')才能工作,但它不会,而$('.mk[value=1]')会。 请别人帮选择器内的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

您需要的x变量追加到字符串:

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

而且,你要注意,value不是span一个有效的属性,所以这个代码将导致验证的问题。

+0

+1(除了_right_)引用选择器中的属性值。 – 2012-04-09 15:58:40

+0

@MДΓΓБДLL:不需要使用简单属性值的引号。 – 2012-04-09 16:02:59

+1

@amnotiam他们可能不需要,但他们是良好的做法海事组织。 – 2012-04-09 16:03:24

1

试试这样:

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

改变这种

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

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

你需要把你的价值到选择字符串是这样的:

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

你需要要么串连​​字符串

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

或使用.filter()

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

或者因为你已经对他们使用each你可以做过滤有

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

它的原因不工作的是'.mk[value=x]'是一个标准字符串,它不会被解析。

尝试将选择器更改为'.mk[value=' + x + ']',并将x替换为变量的值。