是否可以在不大大影响原始源代码的情况下扩展jQuery .first()
方法,以便它可以接受谓词参数?从根本上说,我想要它做的是类似于LINQ的.First()
,C#方法。在JavaScript中,它看起来像这样:
function first(arr, predicate) {
for (var i = 0; i < arr.length; i++) {
// return the first item fulfilling the predicate
if (predicate.call(arr[i])) {
return arr[i];
}
}
}
var myArray = [1, 3, 5],
myPredicate = function() {
return this >= 2;
};
var result = first(myArray, myPredicate); // should give '3'
我知道用JavaScript可以很容易地实现它;我很好奇是否可以在jQuery中轻松扩展现有方法。
$.fn.firstOne = function(predicate) {
// validate the predicate is a function
if ($.isFunction(predicate)) {
// iterate through each item, finding the first match
for (var i = 0; i < this.length; i++) {
if (predicate.call(this.eq(i), i)) {
return this.eq(i);
}
}
}
// maintain chainability
return $();
};
答案 0 :(得分:3)
您可以根据需要轻松(并安全地)创建自己的方法,
$.fn.firstfn = function(fn) {
return this.filter(fn).first()
}
$("#nav > li").firstfn(function() {
return $(this).text() === "John Smith";
});
但是我不建议您覆盖现有方法。只需添加自己的方法。
答案 1 :(得分:1)
您可以使用自己的函数see this question for how to do this
轻松扩展jQuery但是它已经内置了选择器来使用谓词/选择器来执行first()
。以下是一些例子
$("#mycontainer li.classYouWant").first();
$("#mycontainer").find("another selector").first();
$("#mycontainer li a:first");