jQuery: احصل على أسلاف (أو أحفاد) وذاتي
-
22-09-2019 - |
سؤال
يمكن للمرء استخدام matchedset.find(selector)
/ matchedset.parents(selector)
للحصول على أحفاد/أسلاف المجموعة المتطابقة الحالية التي تمت تصفيتها بواسطة محدد ، ولكن هذا لا يشمل المجموعة المتطابقة نفسها (إذا حدث ذلك لمطابقة المحدد أيضًا). هل هناك طريقة أفضل (أكثر إيجازًا و/أو أسرع) للحصول عليها من
matchedset.find(selector).add(matchedset.filter(selector))
و CORE للآباء ()؟
المحلول
يمكنك القيام بالأمر:
matchedset.find('*').andSelf().filter(selector);
للوالدين:
matchedset.parents('*').andSelf().filter(selector);
نصائح أخرى
أعتقد أن طريقتك فعالة من حيث وقت التنفيذ ، ولكن ما تطلبه هو السكر النحوي. لذلك ، يمكنك لفه في البرنامج المساعد:
jQuery.fn.findAndSelf = function(selector) {
return this.find(selector).add(this.filter(selector))
}
ثم استخدمه مثل هذا:
$('.whatever').findAndSelf('.awesome')
إذا كنت ترغب في الحصول على خيال ، فيمكنك إنشاء مكون إضافي لا يعمل فقط لـ "Find" ولكن لـ "الآباء" و "الأطفال" وغيرها من الإضافات المستندة إلى المحدد:
jQuery.fn.withSelf = function(plugin, selector) {
return this[plugin](selector).add(this.filter(selector))
}
بعد ذلك ، ستزود كوسيطة أول مسند اجتياز تريد الاتصال به:
$('.whatever').withSelf('find', '.awesome')
$('.whatever').withSelf('parents', '.awesome')
فقط للركلات ، مكون إضافي ممتع آخر يتيح لك استدعاء عدد تعسفي من الإضافات عبر الفقرة في وقت واحد:
jQuery.fn.traverse = function(plugins, selector) {
var set = new jQuery();
$.each(plugins, function(i, val) {
set.add(this[val](selector));
}
return set
}
يمكنك استدعاء هذا واحد مع أي مجموعة من الإضافات المستندة إلى المحدد ، على النحو التالي:
$('.whatever').traverse(['find','filter'], '.awesome')
$('.whatever').traverse(['parents','find'], '.awesome')
$('.whatever').traverse(['parents', 'filter'], '.awesome')
على الرغم من أن حل Jeoff لطيف ، إلا أنه من الجيد أحيانًا أن تكون قادرًا على تكرار جميع العناصر ، بما في ذلك نفسه بدون محدد. هذه الوظيفة الإضافية أكثر مرونة قليلاً:
$.fn.all = function(selector) {
if(selector===window.undefined) return this.find('*').andSelf();
return this.filter(selector).add(this.find(selector));
};
ابحث عن وظيفة "ونفس ()".
للآباء والأمهات لديك closest(selector)