我们在Prototype中有一个名为.any
的函数。我希望在Jquery中也一样。
我的原型代码是:
if (item_name == '' || $R(1,ind).any(function(i){return($F("bill_details_"+i+"_narration") == item_name)})) {
alert("This item already added.");
}
我想使用Jquery执行等效功能。
请帮我实现所需的输出。在此先感谢..
答案 0 :(得分:23)
对于IE 9+,它内置于:
some()方法测试数组中的某个元素是否通过了由提供的函数实现的测试。
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some
[2, 4, 6, 8, 10].some(function(n) { return n > 5; });
// -> true (the iterator will return true on 6)
对于IE 8及以下版本:
原型any
[2, 4, 6, 8, 10].any(function(n) { return n > 5; });
// -> true (the iterator will return true on 6)
您可以使用jQuery.grep
:
jQuery.grep([2, 4, 6, 8, 10], function(n) { return n > 5; }).length > 0;
// -> true (as grep returns [6, 8, 10])
下划线_.any
或_.some
_.any([2, 4, 6, 8, 10], function(n) { return n > 5; });
// -> true (the iterator will return true on 6)
答案 1 :(得分:5)
ES5有一个名为Array.prototype.some
的内置函数,用于测试数组中任何元素是否与谓词函数匹配,并在找到匹配元素后立即停止迭代。
.some(function(el) {
return el.value === item_name;
});
然后您的问题就变成了创建所需元素的数组之一,这比在Prototype中更难,因为jQuery中没有“范围”运算符。幸运的是,$.map
迭代空元素,即使内置Array.prototype.map
没有,您也可以使用new Array(ind)
:
var found = $.map(new Array(ind), function(_, x) {
return "bill_details_" + (x + 1) + "_narration";
}).some(function(id) {
var el = document.getElementById(id);
return el && (el.value === item_name);
});
上面的链接包含旧版浏览器.some
的垫片。
答案 2 :(得分:3)
JQuery有.is()方法,来自文档:Check the current matched set of elements against a selector, element, or jQuery object and return *true* if at least one of these elements matches the given arguments
。因此,等效代码是:
if (item_name == '' || $([1,ind]).is(function(i) { return $('#bill_details_'+i+'_narration').attr('name') == item_name; })) {
alert("This item already added.");
}
答案 3 :(得分:0)
似乎http://api.jquery.com/jQuery.grep/正是您所寻找的。 p>
试
if (item_name == '' || $.grep([1,ind],function(i){return($("#bill_details_"+i+"_narration").attr("name") == item_name)}).length>0) {
alert("This item already added.");
}
答案 4 :(得分:0)
根据JQuery的文档,如果你在回调函数中返回false,它将打破循环:
我们可以通过使回调函数返回false来在特定迭代中中断$ .each()循环。返回非false与for循环中的continue语句相同;它将立即跳到下一次迭代。