15

我们.any在 Prototype 中调用了一个函数。我想要和 Jquery 一样的东西。

我的原型代码是:

 if (item_name == '' || $R(1,ind).any(function(i){return($F("bill_details_"+i+"_narration") == item_name)})) {
     alert("This item already added.");
 }

我想使用 Jquery 执行等效功能。

请帮助我实现所需的输出。提前致谢..

4

5 回答 5

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 及以下版本:

任何原型

[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)
于 2013-03-27T10:58:02.640 回答
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上面的链接包含适用于旧版浏览器的 shim 。

于 2013-03-27T12:15:37.027 回答
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.");
 }
于 2014-12-11T19:21:10.937 回答
0

看来http://api.jquery.com/jQuery.grep/是您正在寻找的。

尝试

if (item_name == '' || $.grep([1,ind],function(i){return($("#bill_details_"+i+"_narration").attr("name") == item_name)}).length>0) {
     alert("This item already added.");
 }
于 2013-03-27T10:57:23.973 回答
0

根据 JQuery 的文档,如果您在回调函数中返回 false,它将中断循环:

通过使回调函数返回 false,我们可以在特定迭代中打破 $.each() 循环。返回非 false 与 for 循环中的 continue 语句相同;它将立即跳到下一次迭代。

取自:http ://api.jquery.com/jquery.each/

于 2015-09-18T13:44:03.367 回答