المحدد ‎:eq()‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ في jQuery

من موسوعة حسوب

المحدد ‎:eq()‎‎

الوصف

يُحدد العنصر الموجود في الفهرس n داخل المجموعة المتطابقة.

jQuery( ":eq(index)" )‎

أُ‎ضيف مع الإصدار: 1.0.

index

فهرس صفري للعنصر المراد مطابقته.

jQuery( ":eq(-index)" )‎

أُ‎ضيف مع الإصدار: 1.8.

indexFromEnd

فهرس صفري للعنصر المراد مطابقته، معدود تنازليًا من العنصر الأخير.

تقوم المحددات المرتبطة بالفهارس ( ‎:eq()‎ و ‎:lt() و ‎:gt()‎ و :even و ‎:odd ) بترشيح مجموعة العناصر التي طابقت التعبيرات التي تسبقها. وهي تُضيِّق المجموعة على أساس ترتيب العناصر داخل هذه المجموعة المتطابقة. على سبيل المثال، إذا حُدِدت العناصر أولاً باستخدام مُحدد فئة ( ‎.myclass ) وأُعيدت أربعة عناصر، يتم إعطاء هذه العناصر الفهارس من 0 إلى 3 لأغراض هذه المحددات.

لاحظ أنه نظرًا لأن مصفوفات JavaScript تستخدم الفهرسة الصفرية، فإن هذه المحددات تفعل الأمر نفسه. وهو السبب في تحديد ‎$( ".myclass:eq(1)" )‎ للعنصر الثاني في المستند مع الفئة myclass بدلاً من الأول. في المقابل، يستخدم ‎:nth-child(n)‎ فهرسة أحادية لتتوافق مع مواصفات CSS.

قبل الإصدار jQuery 1.8، لم يكن المحدد :eq(index) يقبل قيمة سالبة للفهرس index (على الرغم من التابع ‎.eq(index)‎ يقبلها).

ملاحظات إضافية

لأن ‎:eq()‎ هو ملحق تابع لمكتبة jQuery وليس جزءًا من مواصفات CSS، فلا يمكن استفادة الاستعلامات باستخدام ‎:eq()‎ من تحسين الأداء الذي يوفره تابع DOM الأصلي querySelectorAll()‎. للحصول على أداء أفضل في المتصفحات الحديثة، استخدم ‎$("your-pure-css-selector").eq(index)‎ بدلاً من ذلك.

أمثلة

العثور على ثالث عنصر <td> في الجدول <table>:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>eq مثال على المحدد</title>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<table border="1">
  <tr><td>TD #0</td><td>TD #1</td><td>TD #2</td></tr>
  <tr><td>TD #3</td><td>TD #4</td><td>TD #5</td></tr>
  <tr><td>TD #6</td><td>TD #7</td><td>TD #8</td></tr>
</table>
 
<script>
$( "td:eq( 2 )" ).css( "color", "red" );
</script>
 
</body>
</html>

تطبيق ثلاثة أنماط مختلفة لسرد العناصر لإثبات أنَّ ‎:eq()‎ مُصمم لتحديد عنصر واحد، بينما التوابع ‎:nth-child()‎ أو ‎:eq()‎ داخل حلقات مثل ‎.each()‎ يمكنها تحديد عناصر متعددة:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>eq demo</title>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<ul class="nav">
  <li>List 1, item 1</li>
  <li>List 1, item 2</li>
  <li>List 1, item 3</li>
</ul>
<ul class="nav">
  <li>List 2, item 1</li>
  <li>List 2, item 2</li>
  <li>List 2, item 3</li>
</ul>
 
<script>
// تطبيق لون الخلفية الصفراء على <li> واحدة فقط
$( "ul.nav li:eq(1)" ).css( "backgroundColor", "#ff0" );
 
// تطبيق الخط المائل على نص <li> الثاني داخل كل <ul class = "nav">
$( "ul.nav" ).each(function( index ) {
  $( this ).find( "li:eq(1)" ).css( "fontStyle", "italic" );
});
 
// تطبيق لون النص الأحمر على سليلات <ul class = "nav">
// لكل <li> يكون الابن الثاني من أصله
$( "ul.nav li:nth-child(2)" ).css( "color", "red" );
</script>
 
</body>
</html>

إضافة فئة إلى العنصر الثاني من القائمة الثانية من خلال استهداف عنصر <li> قبل الأخير:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>eq demo</title>
  <style>
  .foo {
    color: blue;
    background-color: yellow;
  }
  </style>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<ul class="nav">
  <li>List 1, item 1</li>
  <li>List 1, item 2</li>
  <li>List 1, item 3</li>
</ul>
<ul class="nav">
  <li>List 2, item 1</li>
  <li>List 2, item 2</li>
  <li>List 2, item 3</li>
</ul>
 
<script>
$( "li:eq(-2)" ).addClass( "foo" )
</script>
 
</body>
</html>

مصادر