使用 jquery 个元素和数字

Working with jquery elements and numbers

$('select.farbe-1').change(function() {
  var chosen = $(this).find(":selected").text().toLowerCase();
  $('img.color-1').attr('src', 'http://www.schiendorfer.info/wordpress/wp-content/plugins/bestellungen/img/color/' + chosen + '.jpg');
});

$('select.farbe-2').change(function() {
  var chosen = $(this).find(":selected").text().toLowerCase();
  $('img.color-2').attr('src', 'http://www.schiendorfer.info/wordpress/wp-content/plugins/bestellungen/img/color/' + chosen + '.jpg');
});

$('select.farbe-3').change(function() {
  var chosen = $(this).find(":selected").text().toLowerCase();
  $('img.color-3').attr('src', 'http://www.schiendorfer.info/wordpress/wp-content/plugins/bestellungen/img/color/' + chosen + '.jpg');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="product-choice choice-1">

  <img class="color-1" src="http://www.schiendorfer.info/wordpress/wp-content/plugins/bestellungen/img/color/blue.jpg">

  <select class="farbe-1" name="farbe_1">
    <option value="3">Black</option>
    <option value="1">Blue</option>
    <option value="2">Green</option>
    <option value="4">Orange</option>
    <option value="0" selected="">Red</option>
  </select>

</div>

<div class="product-choice choice-2">

  <img class="color-2" src="http://www.schiendorfer.info/wordpress/wp-content/plugins/bestellungen/img/color/blue.jpg">

  <select class="farbe-2" name="farbe_2">
    <option value="3">Black</option>
    <option value="1">Blue</option>
    <option value="2">Green</option>
    <option value="4">Orange</option>
    <option value="0" selected="">Red</option>
  </select>

</div>

<div class="product-choice choice-3">

  <img class="color-3" src="http://www.schiendorfer.info/wordpress/wp-content/plugins/bestellungen/img/color/blue.jpg">

  <select class="farbe-3" name="farbe_3">
    <option value="3">Black</option>
    <option value="1">Blue</option>
    <option value="2">Green</option>
    <option value="4">Orange</option>
    <option value="0" selected="">Red</option>
  </select>

</div>

我有上面的代码,它工作正常。但我必须重复这10次。您可以很容易地看到唯一的区别是 select.farbe-**x**img.color-**x**

如何减少代码并写出这个"professionally"?

编辑:我添加了一个代码段 ;)

你可以这样做:

for(var i = 1; i <= 10; i++){
    $('select.farbe-'+i).change(function(){
        var chosen = $(this).find(":selected").text().toLowerCase();
        $('img.color-'+i).attr('src','/wordpress/wp-content/plugins/bestellungen/img/color/'+chosen+'.jpg'); 
    });
}

据我了解,您的问题已解决。您可以在 jQuery 的键内连接字符串。

而不是编号 classes,给它们相同的 class,并使用 .index().eq() 来获取当前位置并使用它来找到要更改的相应元素。

$('select.farbe').change(function() {
  var index = $("select.farbe").index(this)
  var chosen = $(this).find(":selected").text().toLowerCase();
  $('img.color').eq(index).attr('src', 'http://www.schiendorfer.info/wordpress/wp-content/plugins/bestellungen/img/color/' + chosen + '.jpg');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="product-choice choice-1">

  <img class="color" src="http://www.schiendorfer.info/wordpress/wp-content/plugins/bestellungen/img/color/blue.jpg">

  <select class="farbe" name="farbe_1">
    <option value="3">Black</option>
    <option value="1">Blue</option>
    <option value="2">Green</option>
    <option value="4">Orange</option>
    <option value="0" selected="">Red</option>
  </select>

</div>

<div class="product-choice choice-2">

  <img class="color" src="http://www.schiendorfer.info/wordpress/wp-content/plugins/bestellungen/img/color/blue.jpg">

  <select class="farbe" name="farbe_2">
    <option value="3">Black</option>
    <option value="1">Blue</option>
    <option value="2">Green</option>
    <option value="4">Orange</option>
    <option value="0" selected="">Red</option>
  </select>

</div>

<div class="product-choice choice-3">

  <img class="color" src="http://www.schiendorfer.info/wordpress/wp-content/plugins/bestellungen/img/color/blue.jpg">

  <select class="farbe" name="farbe_3">
    <option value="3">Black</option>
    <option value="1">Blue</option>
    <option value="2">Green</option>
    <option value="4">Orange</option>
    <option value="0" selected="">Red</option>
  </select>

</div>

或者,由于下拉菜单总是紧跟在图片之后,您可以简单地使用

$(this).prev().attr('src', 'http://www.schiendorfer.info/wordpress/wp-content/plugins/bestellungen/img/color/' + chosen + '.jpg');

你也可以试试这个

$('select[name*="farbe-"]').change(function () {
    var $index=$(this).attr('name').split('-')[1];
    var $colVal=$(this).find(':selected').val();
    $('img.color-'+$index).attr('src','http://www.schiendorfer.info/wordpress/wp-content/plugins/bestellungen/img/color/'+$colVal+'.jpg'); 
});

我做过很多类似的事情,我喜欢将数字 id 值作为数据属性包含在标签上。在这种情况下,我将其称为数据颜色。这样,我可以轻松访问哪个元素具有更改功能,只需获取它的 id 即可。然后我使用这个 ID 来更改相关的其他元素,我已经给了相同的 ID。

我无权访问您 link 的图像文件,因此我在每个 select 框后面添加了一个跨度,这些框被更新了。主体相同:

工作fiddle: https://jsfiddle.net/52yfekzx/

Javascript:

$('select.farbe').change(function(){
    var chosen = $(this).find(":selected").text().toLowerCase();
    var colorID = $(this).data("color");
    $('span.color[data-color="'+colorID+'"]').text(chosen); 
});

HTML:

<div class="product-choice choice-1">

<img class="color"  data-color="1" src="http://www.schiendorfer.info/wordpress/wp-content/plugins/bestellungen/img/color/blue.jpg">

<select class="farbe" data-color="1" name="farbe_1">
    <option value="3">Black</option>
    <option value="1">Blue</option>
    <option value="2">Green</option>
    <option value="4">Orange</option>
    <option value="0" selected="">Red</option>                
</select>
<span class="color" data-color="1"></span>
</div>

<div class="product-choice choice-2">

<img class="color" data-color="2" src="http://www.schiendorfer.info/wordpress/wp-content/plugins/bestellungen/img/color/blue.jpg">

<select class="farbe" data-color="2"  name="farbe_2">
    <option value="3">Black</option>
    <option value="1">Blue</option>
    <option value="2">Green</option>
    <option value="4">Orange</option>
    <option value="0" selected="">Red</option>                
</select>
<span class="color" data-color="2"></span>          
</div>

<div class="product-choice choice-3">

<img class="color" data-color="3" src="http://www.schiendorfer.info/wordpress/wp-content/plugins/bestellungen/img/color/blue.jpg">

<select class="farbe" data-color="3" name="farbe_3">
    <option value="3">Black</option>
    <option value="1">Blue</option>
    <option value="2">Green</option>
    <option value="4">Orange</option>
    <option value="0" selected="">Red</option>                
</select>
<span class="color" data-color="3"></span>

</div>