【问题标题】:jQuery get element by data idjQuery通过数据ID获取元素
【发布时间】:2014-03-03 19:53:27
【问题描述】:

我正在尝试通过数据属性值 (data-event_id=1282) 获取 <li> 元素。

<div id="timeline">
    <ul>
        <li class="timeline-event">
             <div>Event Body</div>
        </li>
    </ul>
</div>

$el = $('#timeline ul').find("li.timeline-event").data('event_id');
console.log($el);    // returns 1282

$el = $('#timeline ul').find("li.timeline-event[data-event_id='1282']").html();
console.log($el);    // returns undefined

我做错了什么?

编辑 - 解决方案

数据是在代码的其他地方使用 .data('event_id', '1282') 设置的。

如果使用 .data() 设置,jQuery 将无法获取数据。

我在这里使用@psycho brm 的 filterByData 函数找到了解决方案。有效!

jQuery how to find an element based on a data-attribute value?

$.fn.filterByData = function(prop, val) {
    return this.filter(
        function() { return $(this).data(prop)==val; }
    );
}

我想这一定是一个 jQuery 错误?

【问题讨论】:

  • 您提供的 html 中没有 data-event_id 属性。请更新您的示例代码。
  • .find() 永远不会返回 undefined,即使它没有找到任何东西,它也会返回一个空的 jQuery 集合。
  • 它是如何复制的?他已经使用了正确的选择器。他的问题一定是不同的——他显然没有发布实际代码。
  • @Barmar,你的权利,我从最后错过了 .html() 。然后它返回 undefined。

标签: jquery dom jquery-selectors


【解决方案1】:

第二个 id 返回 undefined 因为你应该为他提供两个选项 li (一) 班级名称 (ii) 属性

您应该尝试仅指定其中一个

【讨论】:

    【解决方案2】:

    数据是在代码的其他地方使用 .data('event_id', '1282') 设置的。

    如果使用 .data() 设置,jQuery 将无法获取数据。

    我在这里使用 filterByData 函数找到了解决方案。有效!

    jQuery how to find an element based on a data-attribute value?

    【讨论】:

    • 在您的答案中添加您推荐答案的内容。否则,您的答案只不过是 SO 不推广的仅链接答案。如果你能提供一个小提琴,那就太好了
    【解决方案3】:

    我在你的 html 中没有看到 data-attr。

    我已经尝试了您的代码,将 data-event_id="1282" 添加到 li http://jsfiddle.net/dehisok/Wa5RG/

     <li class="timeline-event" data-event_id="1282">
    

    有效!

    【讨论】:

    • 也许,之前有一些js代码设置了“数据”(但不是属性)。
    猜你喜欢
    • 2016-05-09
    • 1970-01-01
    • 2011-02-23
    • 2017-05-26
    • 1970-01-01
    • 2013-11-20
    • 2015-09-02
    • 2012-07-20
    相关资源
    最近更新 更多