javascript - 更改类与选择字段选项的属性匹配的文本值范围

标签 javascript jquery html drop-down-menu

问题:如何更改范围内的文本,其中范围类与选择字段选项属性相匹配?并且还使其灵活,这样我就不需要对所有属性和跨类进行硬编码?

我认为我需要一些解决方案,其中 JS 函数搜索并匹配 span 类与选项属性,如果存在匹配,则应更新 span 文本。

带有选项属性的演示选择字段

<select class="conditional-element-selector">
    <option value="select-element-1" weight="12" size="20" persons="10">Option 1</option>
    <option value="select-element-2" weight="24" size="40" persons="20">Option 2</option>
    <option value="select-element-3" weight="48" size="80" persons="40">Option 3</option>
</select>

演示 HTML,其中 span 需要根据与 span 类匹配的选项属性进行更改

<div class="conditional-element-1">   
    <li>Weight: <span class="weight">12</span> kg </li>
    <li>Persons: <span class="persons">10</span></li>
    <li>Size: <span class="size">20</span> m3 </li>
</div>

我想创建 JS 函数来搜索选项属性并搜索“.conditional-element-1”内的跨度类,如果存在匹配,则更新跨度文本。我还需要能够添加更多属性和跨度。

$('select.conditional-element-selector').on('change', function() {
  var targetIndex = this.selectedIndex + 1; // This looks at which option is selected
  $('.conditional-element-' + targetIndex).... // This is unfinshed 

// Extend function here to match different span classes with different option attributes and change span text 

});

最佳答案

为了使您的 HTML 有效,我更改了您的 HTML - 最好使用数据属性来存储体重、尺寸和人员等信息。此外,更容易保持此解决方案的动态,因为它会读取所选选项中的所有属性,并在属性名称以“data”开头的情况下附加它们的值。

$(document).ready(function() {
   $('select.conditional-element-selector').on('change', function() {
      var targetIndex = this.selectedIndex;
      var selected = $(this).children("option:selected");
         $(selected).each(function() {
            $.each(this.attributes, function() {
             if (this.name.startsWith("data")) {
               var attrName = this.name.substr(5);
               $('.conditional-element-' + targetIndex).find("." + attrName).text(this.value)
             }
            });
         });
   });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select class="conditional-element-selector">
  <option>Please select</option>
  <option value="select-element-1" data-weight="12" data-size="20" data-persons="10">Option 1</option>
  <option value="select-element-2" data-weight="24" data-size="40" data-persons="20">Option 2</option>
  <option value="select-element-3" data-weight="48" data-size="80" data-persons="40">Option 3</option>
</select>
<div class="conditional-element-1">
  <ul>
<li><span class="weight"></span> kg</li>
<li><span class="persons"></span></li>
<li><span class="size"></span> m3</li>
  </ul>
</div>
<div class="conditional-element-2">
   <ul>
<li><span class="weight"></span> kg</li>
<li><span class="persons"></span></li>
<li><span class="size"></span> m3</li>
  </ul>
</div>
<div class="conditional-element-3">
   <ul>
<li><span class="weight"></span> kg</li>
<li><span class="persons"></span></li>
<li><span class="size"></span> m3</li>
  </ul>
</div>

关于javascript - 更改类与选择字段选项的属性匹配的文本值范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61187599/

相关文章:

jquery - 当jquery中有多个类时如何读取元素

html - 我想使用 css 在绝对定位的图像后面放置一个固定的背景

javascript - 使用 vue.js 多表单进行 HTML5 验证

javascript - jQuery - Mouseenter/Mouseleave 父/子问题

javascript - c.apply 不是函数

jquery - 增加自动完成滚动条的大小

html - 样式元素上的 innerHTML 导致运行时错误

javascript - 使我的网站离线的缓存不起作用

javascript - 句子中每个单词的匹配模式

javascript - 带 JSON 响应的跨域请求