javascript - 如何使用 JavaScript / jQuery 通过数据属性抓取元素
问题描述
我想获取两个li
元素的数据属性值。但是,这不起作用,因为我似乎没有引用正确的对象 ( el
) 来获取它们。el
是保存事件侦听器的 currentTarget 。
现在我像这样抓住它们:
const refinementData = el.dataset.identifier
我需要这个数据属性值 ( data-identifier
) 用于 if 条件和迭代。
在第一次迭代中,这可以正常工作并抓取li
元素。
在第二次迭代中它不起作用,因为el
它还引用了其他 dom 元素(例如 a span
)。它试图在 上找到数据属性 ( data-identifier
)span
并返回undefined
。
我尝试了el
像这样的 jQuery 解决方案的替代方案:
const refinementData2 = $('.refinement-list[data-identifier]');
或像这样的普通 JavaScript 版本:
const refinementData2 = document.querySelector('.refinement-list');
这是我想从这两个li
项目中获取值的 HTML / Twig 文件:
<div class="refinement-options tag-options js-action-element">
<ul>
{% for refinement in concreteProduct.productOptions.refinements %}
{# create <li> with color of refinement key #}
{% if refinement.key != 'V00' %}<li class="refinement-list with-icon without-text svg-refinement {{refinement.key|lower}} {{refinement.key == pre_config_refinement ? 'active': ''}} option"
data-refinement="{{refinement.key}}" data-identifier="refinement"></li>{% endif %}
{% endfor %}
{% for tag in concreteProduct.productOptions.tags %}
{# create <li> with tag icon #}
{% if tag.key != 'T00' %}<li class="refinement-list with-icon without-text svg-tag {{tag.key|lower}} {{tag.key == pre_config_tag ? 'active': ''}} option" data-tag="{{tag.key}}" data-identifier="tag"></li>{% endif %}
{% endfor %}
</ul>
</div>
解决方案
尝试先给予li
。这样,您可以将其精确缩小到 el。
$('li.refinement-list[data-identifier]')
演示
$('li.refinement-list[data-identifier]').each(function(i, obj) {
console.log(obj.innerHTML, $(obj).attr('data-identifier'));
})
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<div class="refinement-options tag-options js-action-element">
<ul>
<li class="refinement-list with-icon without-text svg-refinement {{refinement.key|lower}} {{refinement.key == pre_config_refinement ? 'active': ''}} option" data-refinement="{{refinement.key}}" data-identifier="refinement">a</li>
<li class="refinement-list with-icon without-text svg-tag {{tag.key|lower}} {{tag.key == pre_config_tag ? 'active': ''}} option" data-tag="{{tag.key}}" data-identifier="tag">b</li>
</ul>
</div>
推荐阅读
- javascript - 威迪奥,摩卡咖啡。如何创建(随机生成)全局变量并在每次测试中使用它
- linux - 无法找到包裹。Linux命令错误
- python - BigQuery ASCII 0 错误,即使只有 ASCII 字符
- reactjs - 服务器端渲染对 Web 应用程序有好处还是仅是静态的?
- python - Python XML eBay API 调用
- javascript - 在输入表中添加或删除行
- google-cloud-firestore - 如何使用内部集合 Firestore 执行添加集合
- java - 使用 Java LinkedList 中的方法查找百分比
- javascript - JavaScript replaceAll 使用变量而不是字符串进行不区分大小写的搜索
- jquery - ProcessMaker 如何通过 Javascript 使用 API 更新用户