【问题标题】:Find First Element With Data Attribute Greater Than Zero JQuery查找数据属性大于零的第一个元素 JQuery
【发布时间】:2016-06-10 15:47:34
【问题描述】:
我有一个 .item-wrap 类的 div 列表
目前,我使用以下代码选择第一个 div
$(".item-wrap:first").trigger( "click" );
每个.item-wrap 都有一个data-amount 属性。
如何修改我当前的代码以选择第一个 .item-wrap 的 data-amount 大于 0?
【问题讨论】:
标签:
javascript
jquery
html
【解决方案1】:
使用filter 函数,我们可以限制我们的搜索。要通过数据属性选择元素,jQuery 有一个方便的data() 函数。
这可能会显示多个结果,如我的示例所示。要获取第一个,可以使用first 方法。
$("div").filter(function() {
return $(this).data("amount") > 0;
}).first().css({"color": "green"});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-amount="-7">On Tuesday I lost 7 dollars gambling</div>
<div data-amount="-3">On Wednesday, I lost 3 dollars gambling</div>
<div data-amount="37">On Thursday, I actually won 37 dollars</div>
<div data-amount="16">I'm on a roll. Won 16 more dollars today</div>
一些注意事项
如果您的数据属性不完全由数字组成,则此代码将不起作用。这是假设您所有的 data-amounts 都有一个与正则表达式匹配的值:\A\d*\z
如果字符串与特定模式匹配,则可以将字符串与数字进行比较。这是因为 JavaScript 执行自动类型转换。在这个例子中,它相当简单,因为我们没有很多数据。但是,如果您有更多的 div,您可能想要执行类似 +$(this).data("amount") > 0
的操作
【解决方案2】:
您可以使用each() 遍历元素并使用return false; 退出循环
$('.item-wrap').each(function() {
if (+$(this).data('amount') > 0) {
// Do "Hello World" here
$(this).trigger('click');
// Breakout
return false;
}
});