سؤال

يمكن للمرء استخدام 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)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top