【问题标题】:Get next html element custom attribute with jquery使用 jquery 获取下一个 html 元素自定义属性
【发布时间】:2022-01-22 08:10:33
【问题描述】:

我有html:

<div>
   <label>Select1</label>
   <select class="selectme" data-field-name="select1">
     <option selected>Select Me</option>
   </select>
</div>
<div>
   <label>Select2</label>
   <select class="selectme" data-field-name="select2">
     <option selected>Select Me</option>
   </select>
</div>

我想获取此自定义属性(data-field-name),然后在每个更改事件上进行选择。我可以得到这个选择属性,但我不能得到下一个选择属性,我试着这样做,但它不起作用。我使用 jquery:

$('.selectme').on('change', function () {
    var selectOneName = $(this).attr("data-field-name");
    var selectTwoName = $(this).next('select').attr("data-field-name");
});

我该怎么做?谢谢!

【问题讨论】:

  • 对于您的问题,为什么不尝试阅读next 的工作原理? api.jquery.com/next
  • 抱歉,已修复,谢谢

标签: javascript html jquery


【解决方案1】:

问题是因为next() 用于检索兄弟元素,而select 不是兄弟元素。

要执行您需要的操作,您需要遍历 DOM 以找到您想要检索的内容。一种方法是使用closest() 获取父级div,然后使用next()find(),如下所示:

$('.selectme').on('change', e => {
  let $select = $(e.target);
  var fieldName = $select.data('field-name');
  console.log(fieldName);

  var $nextSelect = $select.closest('div').next().find('select');
  let nextFieldName = $nextSelect.data('field-name');
  console.log(nextFieldName);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<div>
  <label>Select1</label>
  <select class="selectme" data-field-name="select1">
    <option selected>Foo</option>
    <option>Bar</option>
  </select>
</div>
<div>
  <label>Select2</label>
  <select class="selectme" data-field-name="select2">
    <option selected>Foo</option>
    <option>Bar</option>
  </select>
</div>

请注意,作为上述示例的一部分,我已更正了您的 HTML 中的问题。我认为它们只是将代码转换为您的问题引起的错误。

【讨论】:

  • 没有意义在这里使用箭头函数只是发现自己不得不用e.target替换this
  • 也许,但我现在几乎完全在编写 ES6,只是替换了 anon。我看到它们的功能
  • 然后重新考虑这种处理方式。箭头函数从来都不是要替代的,而是要补充常规函数;当您想要将 this 精确绑定到定义箭头函数时的任何内容时,或者如果整个函数对 this 绝对没有用处(这不是事件处理程序)。有很多地方你真的不想要箭头功能。另外,您介绍的差异与匿名函数无关。
  • 顺便说一句,如果前面的 jQuery 选择器找不到元素,jQuery 中的 data() 是否安全?
  • Btw, is data() in jQuery safe if the preceding jQuery selector won't find an element? 当然,是的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
相关资源
最近更新 更多