الفرق بين المراجعتين لصفحة: «jQuery/after»

من موسوعة حسوب
طلا ملخص تعديل
لا ملخص تعديل
سطر 10: سطر 10:


=== <code>‎.after( content [, content ] )‎</code> ===
=== <code>‎.after( content [, content ] )‎</code> ===
أضيفت في الإصدار: 1.0
أضيفت في الإصدار: 1.0.
 
<code>content</code>


==== <code>content</code> ====
[[JavaScript/String|سلسلة نصيّة من الكائن htmlString]]، أو [[JavaScript/Element|عنصر]]، أو [[JavaScript/Text|نص]]، أو [[JavaScript/Array|مصفوفة]]، أو [[jQuery/jQuery|jQuery]]، وتُمثِّل سلسلة html، أو عنصر DOM، أو عقدة نصيّة (text node)، أو مصفوفة من العناصر والعقد النصيّة، أو كائن jQuery المطلوب إدخالها بعد كل عنصر من مجموعة العناصر المُطابقة.
[[JavaScript/String|سلسلة نصيّة من الكائن htmlString]]، أو [[JavaScript/Element|عنصر]]، أو [[JavaScript/Text|نص]]، أو [[JavaScript/Array|مصفوفة]]، أو [[jQuery/jQuery|jQuery]]، وتُمثِّل سلسلة html، أو عنصر DOM، أو عقدة نصيّة (text node)، أو مصفوفة من العناصر والعقد النصيّة، أو كائن jQuery المطلوب إدخالها بعد كل عنصر من مجموعة العناصر المُطابقة.


==== <code>content</code> ====
==== <code>content</code> ====
[[JavaScript/String|سلسلة نصيّة من الكائن htmlString]]، أو [[JavaScript/Element|عنصر]]، أو [[JavaScript/Text|نص]]، أو [[JavaScript/Array|مصفوفة]]، أو [[jQuery/jQuery|jQuery]]، وتُمثِّل عنصر إضافي واحد أو أكثر من عناصر DOM، أو العقد النصيّة (text node)، أو مصفوفات من العناصر والعقد النصية، أو سلسلة html، أو كائنات jQuery المطلوب إدخالها بعد كل عنصر من مجموعة العناصر المُطابقة.
[[JavaScript/String|سلسلة نصيّة من الكائن htmlString]]، أو [[JavaScript/Element|عنصر]]، أو [[JavaScript/Text|نص]]، أو [[JavaScript/Array|مصفوفة]]، أو [[jQuery/jQuery|jQuery]]، وتُمثِّل عنصرًا إضافيًا واحدًا أو أكثر من عناصر DOM، أو العقد النصيّة (text node)، أو مصفوفات من العناصر والعقد النصية، أو سلسلة html، أو كائنات jQuery المطلوب إدخالها بعد كل عنصر من مجموعة العناصر المُطابقة.


=== <code>‎.after( function )‎</code> ===
=== <code>‎.after( function )‎</code> ===
أضيفت في الإصدار: 1.4
أضيفت في الإصدار: 1.4.


==== <code>function</code> ====
==== <code>function</code> ====
دالة على الشكل <code>[[JavaScript/Function|Function]]( [[JavaScript/Integer|Integer]] index )‎</code> تُعيد [[JavaScript/String|سلسلة نصيّة من الكائن htmlString]]، أو [[JavaScript/Element|عنصر أو عناصر DOM]]، أو عقدة أو عقد نصيّة، أو [[jQuery/jQuery|كائن jQuery]] المطلوب إدخالها بعد كل عنصر من مجموعة العناصر المُطابقة، this هو العنصر الحالي. تستقبل فهرس موقع العنصر في المجموعة كوسيط لها.
دالة على الشكل <code>[[JavaScript/Function|Function]]( [[JavaScript/Integer|Integer]] index )‎</code> تُعيد [[JavaScript/String|سلسلة نصيّة من الكائن htmlString]]، أو [[JavaScript/Element|عنصر أو عناصر DOM]]، أو عقدة أو عقد نصيّة، أو [[jQuery/jQuery|كائن jQuery]] المطلوب إدخالها بعد كل عنصر من مجموعة العناصر المُطابقة، يُمثِّل المعاملُ <code>[[JavaScript/this|this]]</code> العنصرَ الحالي. تستقبل فهرس موقع العنصر في المجموعة كوسيط لها.


=== <code>‎.after( function-html )‎</code> ===
=== <code>‎.after( function-html )‎</code> ===
أضيفت في الإصدار: 1.10
أضيفت في الإصدار: 1.10.


==== <code>function-html</code> ====
==== <code>function-html</code> ====
دالة على الشكل <code>[[JavaScript/Function|Function]]( [[JavaScript/Integer|Integer]] index, [[JavaScript/String|String]] html )‎</code> تُعيد [[JavaScript/String|سلسلة نصيّة من الكائن htmlString]]، أو [[JavaScript/Element|عنصر أو عناصر DOM]]، أو عقدة أو عقد نصيّة، أو كائن jQuery المطلوب إدخالها بعد كل عنصر من مجموعة العناصر المُطابقة. this هو العنصر الحالي. تستقبل فهرس موقع العنصر في المجموعة وقيمة html القديمة للعنصر كوسائط لها.
دالة على الشكل <code>[[JavaScript/Function|Function]]( [[JavaScript/Integer|Integer]] index, [[JavaScript/String|String]] html )‎</code> تُعيد [[JavaScript/String|سلسلة نصيّة من الكائن htmlString]]، أو [[JavaScript/Element|عنصر أو عناصر DOM]]، أو عقدة أو عقد نصيّة، أو كائن jQuery المطلوب إدخالها بعد كل عنصر من مجموعة العناصر المُطابقة. يُمثِّل المعاملُ <code>[[JavaScript/this|this]]</code> العنصرَ الحالي. تستقبل فهرس موقع العنصر في المجموعة وقيمة html القديمة للعنصر كوسائط لها.


يُنفِّذ التّابعان ‎<code>.after()‎</code> و <code>[[jQuery/insertAfter|‎.insertAfter()‎]]</code> نفس المهمّة. يكمن الفرق الأكبر بينهما في الصّياغة وتحديدًا في موضع المحتوى والهدف. حيث يأتي المحتوى المطلوب إدخاله في التّابع ‎<code>.after()‎</code> من وسيط التّابع:<syntaxhighlight lang="javascript">
يُنفِّذ التّابعان ‎<code>.after()‎</code> و <code>[[jQuery/insertAfter|‎.insertAfter()‎]]</code> نفس المهمّة. يكمن الفرق الأكبر بينهما في الصّياغة وتحديدًا في موضع المحتوى والهدف. حيث يأتي المحتوى المطلوب إدخاله في التّابع ‎<code>.after()‎</code> من وسيط التّابع:<syntaxhighlight lang="javascript">
سطر 36: سطر 37:
</syntaxhighlight>فلنأخذ مثال HTML التّالي:<syntaxhighlight lang="html">
</syntaxhighlight>فلنأخذ مثال HTML التّالي:<syntaxhighlight lang="html">
<div class="container">
<div class="container">
 
  <h2>Greetings</h2>
 <h2>Greetings</h2>
  <div class="inner">Hello</div>
 
  <div class="inner">Goodbye</div>
 <div class="inner">Hello</div>
 
 <div class="inner">Goodbye</div>
 
</div>
</div>
</syntaxhighlight>من المُمكِن إنشاء وإدخال المحتوى بعد عدّة عناصر في نفس الوقت:<syntaxhighlight lang="javascript">
</syntaxhighlight>من المُمكِن إنشاء وإدخال المحتوى بعد عدّة عناصر في نفس الوقت:<syntaxhighlight lang="javascript">
$( ".inner" ).after( "<p>Test</p>" );
$( ".inner" ).after( "<p>Test</p>" );
</syntaxhighlight>يحصل كل عنصر <code>[[HTML/div|<nowiki><div></nowiki>]]</code> لديه الصّنف <code>inner</code> على هذا المحتوى الجديد:<syntaxhighlight lang="html">
</syntaxhighlight>يحصل كل عنصر <code>[[HTML/div|<nowiki><div></nowiki>]]</code> لديه الصّنف <code>inner</code> على هذا المحتوى الجديد:<syntaxhighlight lang="html">
<div class="container">
<div class="container">
 
  <h2>Greetings</h2>
 <h2>Greetings</h2>
  <div class="inner">Hello</div>
 
  <p>Test</p>
 <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
 
  <p>Test</p>
 <p>Test</p>
 
 <div class="inner">Goodbye</div>
 
 <p>Test</p>
 
</div>
</div>
</syntaxhighlight>
</syntaxhighlight>


سطر 70: سطر 57:
</syntaxhighlight>إن اخترنا العنصر بهذه الطريقة وأدخلناه في مكان وحيد في DOM، فسيُنقَل إلى هذا المكان بدلًا من نسخه:<syntaxhighlight lang="html">
</syntaxhighlight>إن اخترنا العنصر بهذه الطريقة وأدخلناه في مكان وحيد في DOM، فسيُنقَل إلى هذا المكان بدلًا من نسخه:<syntaxhighlight lang="html">
<div class="container">
<div class="container">
 
  <div class="inner">Hello</div>
 <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
 
 <div class="inner">Goodbye</div>
 
</div>
</div>
<h2>Greetings</h2>
<h2>Greetings</h2>
</syntaxhighlight>
</syntaxhighlight>


'''ملاحظة هامّة:''' إن كان هنالك أكثر من عنصر هدف فستُنشَأ نُسخة من العنصر المُدخَل من أجل كل عنصر هدف ما عدا العنصر الأخير.
'''ملاحظة مهمة:''' إن كان هنالك أكثر من عنصر هدف فستُنشَأ نُسخة من العنصر المُدخَل من أجل كل عنصر هدف ما عدا العنصر الأخير.


=== تمرير دالة ===
=== تمرير دالة ===
يدعم التّابع ‎<code>.after()‎</code> بدءًا من إصدار jQuery 1.4 تمرير دالّة له تُعيد العناصر المطلوب إدخالها:<syntaxhighlight lang="javascript">
يدعم التّابع ‎<code>.after()‎</code> بدءًا من إصدار jQuery 1.4 تمرير دالّة له تُعيد العناصر المطلوب إدخالها:<syntaxhighlight lang="javascript">
$( "p" ).after(function() {
$( "p" ).after(function() {
 
  return "<div>" + this.className + "</div>";
 return "<div>" + this.className + "</div>";
 
});
});
</syntaxhighlight>يُدخِل المثال السّابق عنصر <code>[[HTML/div|<nowiki><div></nowiki>]]</code> بعد كلّ فقرة، مع احتواء عنصر <code>[[HTML/div|<nowiki><div></nowiki>]]</code> الجّديد على اسم صنف الفقرة التي تسبقه.
</syntaxhighlight>يُدخِل المثال السّابق عنصر <code>[[HTML/div|<nowiki><div></nowiki>]]</code> بعد كلّ فقرة، مع احتواء عنصر <code>[[HTML/div|<nowiki><div></nowiki>]]</code> الجّديد على اسم صنف الفقرة التي تسبقه.


سطر 100: سطر 77:
يُدخِل المثال التّالي عنصري <code>[[HTML/div|<nowiki><div></nowiki>]]</code> جديدين وعنصر <code>[[HTML/div|<nowiki><div></nowiki>]]</code> موجود حاليًّا بعد الفقرة الأولى:<syntaxhighlight lang="javascript">
يُدخِل المثال التّالي عنصري <code>[[HTML/div|<nowiki><div></nowiki>]]</code> جديدين وعنصر <code>[[HTML/div|<nowiki><div></nowiki>]]</code> موجود حاليًّا بعد الفقرة الأولى:<syntaxhighlight lang="javascript">
var $newdiv1 = $( "<div id='object1'></div>" ),
var $newdiv1 = $( "<div id='object1'></div>" ),
 
  newdiv2 = document.createElement( "div" ),
 newdiv2 = document.createElement( "div" ),
  existingdiv1 = document.getElementById( "foo" );
 
 existingdiv1 = document.getElementById( "foo" );
 
$( "p" ).first().after( $newdiv1, [ newdiv2, existingdiv1 ] );
$( "p" ).first().after( $newdiv1, [ newdiv2, existingdiv1 ] );


</syntaxhighlight>بما أنّ التابع <code>‎.after()‎</code> يقبل أي عدد من الوسائط الإضافيّة، فمن المُمكِن تحقيق نفس النتيجة عن طريق تمرير ثلاثة عناصر <code>[[HTML/div|<nowiki><div></nowiki>]]</code> على شكل ثلاثة وسائط مختلفة، كما يلي:<syntaxhighlight lang="javascript">
</syntaxhighlight>بما أنّ التابع <code>‎.after()‎</code> يقبل أي عدد من الوسائط الإضافيّة، فمن المُمكِن تحقيق نفس النتيجة عن طريق تمرير ثلاثة عناصر <code>[[HTML/div|<nowiki><div></nowiki>]]</code> على شكل ثلاثة وسائط مختلفة، كما يلي:<syntaxhighlight lang="javascript">
سطر 113: سطر 87:


=== ملاحظات إضافية ===
=== ملاحظات إضافية ===
* قبل إصدار jQuery 1.9 كان التّابع <code>‎.after()</code>‎ يُحاوِل إضافة أو تغيير العُقَد في مجموعة jQuery الحاليّة إن لم تكن العقدة الأولى من المجموعة مُتصلة بمستند ما، وفي هذه الحالة يُعيد التّابع مجموعة jQuery جديدة بدلًا من المجموعة الأصليّة. قد يُعيد التّابع أو لا يُعيد نتيجة جديدة اعتمادًا على عدد وسائطه أو على التّرابط بينها. بدءًا من إصدار jQuery 1.9 تُعيد التّوابع <code>‎.after()‎</code>، و <code>[[jQuery/before|‎.before()]]</code>‎، و ‎<code>[[jQuery/replaceWith|.replaceWith()]]</code>‎ دومًا المجموعة الأصليّة غير المُعدّلة، وليس هنالك أي تأثير لاستخدام هذه التّوابع على عقدة لا تملك أصلًا لها، فلن تُغيَّر المجموعة أو العقد التي تحتويها.
* قبل إصدار jQuery 1.9 كان التّابع <code>‎.after()</code>‎ يُحاوِل إضافة أو تغيير العُقَد في مجموعة jQuery الحاليّة إن لم تكن العقدة الأولى من المجموعة مُتصلة بمستند ما، وفي هذه الحالة يُعيد التّابع مجموعة jQuery جديدة بدلًا من المجموعة الأصليّة. قد يُعيد التّابع أو لا يُعيد نتيجة جديدة اعتمادًا على عدد وسائطه أو على التّرابط بينها. بدءًا من إصدار jQuery 1.9 تُعيد التّوابع <code>‎.after()‎</code>، و <code>[[jQuery/before|‎.before()]]</code>‎، و ‎<code>[[jQuery/replaceWith|.replaceWith()]]</code>‎ دومًا المجموعة الأصليّة غير المُعدّلة، وليس هنالك أي تأثير لاستخدام هذه التّوابع على عقدة لا تملك عنصر أب (parent) لها، فلن تُغيَّر المجموعة أو العقد التي تحتويها.
* من تصميم jQuery أنّ الدوال البانية والتوابع الخاصّة بها والتي تقبل سلاسل HTML نصيّة - مثل <code>[[JQuery/jQuery|jQuery()‎]]</code>، و <code>[[JQuery/append|append()‎.]]</code>، و '''‎‎‎'''.after()‎ - تملك القدرة على تنفيذ أي شيفرة، قد يحدث هذا عن طريق حقن العنصر <code>[[HTML/script|script]]</code> أو استخدام خاصيّات HTML التي تُنفِّذ الشيفرة (مثل ‎<code><img onload=""></code>‎). لا تستخدم هذه التّوابع لإدخال سلاسل نصيّة قادمة من مصادر غير موثوقة مثل مُعامِلات استعلام الرّوابط (URL query parameters)، أو الكعكات (cookies)، أو حقول الإدخال. يُؤدِّي فعل ذلك إلى ثغرات من نوع cross-site-scripting (اختصارًا XSS). قم بعمل إزالة أو تهريب للمحارف (escape) المُدخَلة بواسطة المستخدم قبل إضافة المحتوى للمستند.
* من تصميم jQuery أنّ الدوال البانية والتوابع الخاصّة بها والتي تقبل سلاسل HTML نصيّة - مثل <code>[[JQuery/jQuery|jQuery()‎]]</code>، و <code>[[JQuery/append|append()‎.]]</code>، و '''‎‎‎'''<code>.after()</code>‎ - تملك القدرة على تنفيذ أي شيفرة، قد يحدث هذا عن طريق حقن العنصر <code>[[HTML/script|<script>]]</code> أو استخدام خاصيّات HTML التي تُنفِّذ الشيفرة (مثل ‎<code><img onload=""></code>‎). لا تستخدم هذه التّوابع لإدخال سلاسل نصيّة قادمة من مصادر غير موثوقة مثل مُعامِلات استعلام الرّوابط (URL query parameters)، أو الكعكات (cookies)، أو حقول الإدخال. يُؤدِّي فعل ذلك إلى ثغرات من نوع cross-site-scripting (اختصارًا XSS). قم بعمل إزالة أو تهريب للمحارف (escape) المُدخَلة بواسطة المستخدم قبل إضافة المحتوى للمستند.


=== أمثلة ===
=== أمثلة ===
إدخال شيفرة HTML بعد كل الفقرات:<syntaxhighlight lang="html">
إدخال شيفرة HTML بعد كل الفقرات:<syntaxhighlight lang="html">
<!doctype html>
<!doctype html>
<html lang="en">
<html lang="en">
<head>
<head>
 
  <meta charset="utf-8">
 
  <title>after demo</title>
<meta charset="utf-8">
  <style>
 
  p {
 
    background: yellow;
<title>after demo</title>
  }
 
  </style>
 
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<style>
 
 p {
 
   background: yellow;
 
 }
 
 
</style>
 
 
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
 
</head>
</head>
<body>
<body>
 
<p>I would like to say: </p>
<p>I would like to say: </p>
 
<script>
<script>
$( "p" ).after( "<b>Hello</b>" );
$( "p" ).after( "<b>Hello</b>" );
</script>
</script>
 
</body>
</body>
</html>
</html>
</syntaxhighlight>تجربة المثال:<syntaxhighlight lang="text">
</syntaxhighlight>تجربة المثال:<syntaxhighlight lang="text">
I would like to say:
I would like to say:
سطر 170: سطر 122:
</syntaxhighlight>إدخال عنصر DOM بعد كل الفقرات:<syntaxhighlight lang="html">
</syntaxhighlight>إدخال عنصر DOM بعد كل الفقرات:<syntaxhighlight lang="html">
<!doctype html>
<!doctype html>
<html lang="en">
<html lang="en">
<head>
<head>
 
  <meta charset="utf-8">
 
  <title>after demo</title>
<meta charset="utf-8">
  <style>
 
  p {
 
    background: yellow;
<title>after demo</title>
  }
 
  </style>
 
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<style>
 
 p {
 
   background: yellow;
 
 }
 
 
</style>
 
 
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
 
</head>
</head>
<body>
<body>
 
<p>I would like to say: </p>
<p>I would like to say: </p>
 
<script>
<script>
$( "p" ).after( document.createTextNode( "Hello" ) );
$( "p" ).after( document.createTextNode( "Hello" ) );
</script>
</script>
 
</body>
</body>
</html>
</html>
</syntaxhighlight>تجربة المثال:<syntaxhighlight lang="text">
</syntaxhighlight>تجربة المثال:<syntaxhighlight lang="text">
I would like to say:
I would like to say:
سطر 219: سطر 149:




</syntaxhighlight>إدخال كائن jQuery (مُشابِه لمصفوفة مُكوَّنة من عناصر DOM) بعد كل الفقرات:<syntaxhighlight lang="html">
</syntaxhighlight>إدخال كائن jQuery (مُشابِه لمصفوفة مُكوَّنة من عناصر DOM) بعد كل الفقرات <code>[[HTML/p|<nowiki><p></nowiki>]]</code>:<syntaxhighlight lang="html">
<!doctype html>
<!doctype html>
<html lang="en">
<html lang="en">
<head>
<head>
 
  <meta charset="utf-8">
 
  <title>after demo</title>
<meta charset="utf-8">
  <style>
 
  p {
 
    background: yellow;
<title>after demo</title>
  }
 
  </style>
 
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<style>
 
 p {
 
   background: yellow;
 
 }
 
 
</style>
 
 
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
 
</head>
</head>
<body>
<body>
 
<b>Hello</b>
<b>Hello</b>
<p>I would like to say: </p>
<p>I would like to say: </p>
 
<script>
<script>
$( "p" ).after( $( "b" ) );
$( "p" ).after( $( "b" ) );
</script>
</script>
 
</body>
</body>
</html>
</html>
</syntaxhighlight>تجربة المثال:<syntaxhighlight lang="text">
</syntaxhighlight>تجربة المثال:<syntaxhighlight lang="text">
I would like to say:
I would like to say:

مراجعة 13:22، 5 مايو 2018


after( content [, content ] )‎.

القيمة المعادة

كائن jQuery.

الوصف

يُستخدَم التّابع ‎.after()‎ لإدخال المحتوى المُحدَّد عن طريق المُعامِل بعد كل عنصر من مجموعة العناصر المُطابقة.

‎.after( content [, content ] )‎

أضيفت في الإصدار: 1.0.

content

سلسلة نصيّة من الكائن htmlString، أو عنصر، أو نص، أو مصفوفة، أو jQuery، وتُمثِّل سلسلة html، أو عنصر DOM، أو عقدة نصيّة (text node)، أو مصفوفة من العناصر والعقد النصيّة، أو كائن jQuery المطلوب إدخالها بعد كل عنصر من مجموعة العناصر المُطابقة.

content

سلسلة نصيّة من الكائن htmlString، أو عنصر، أو نص، أو مصفوفة، أو jQuery، وتُمثِّل عنصرًا إضافيًا واحدًا أو أكثر من عناصر DOM، أو العقد النصيّة (text node)، أو مصفوفات من العناصر والعقد النصية، أو سلسلة html، أو كائنات jQuery المطلوب إدخالها بعد كل عنصر من مجموعة العناصر المُطابقة.

‎.after( function )‎

أضيفت في الإصدار: 1.4.

function

دالة على الشكل Function( Integer index )‎ تُعيد سلسلة نصيّة من الكائن htmlString، أو عنصر أو عناصر DOM، أو عقدة أو عقد نصيّة، أو كائن jQuery المطلوب إدخالها بعد كل عنصر من مجموعة العناصر المُطابقة، يُمثِّل المعاملُ this العنصرَ الحالي. تستقبل فهرس موقع العنصر في المجموعة كوسيط لها.

‎.after( function-html )‎

أضيفت في الإصدار: 1.10.

function-html

دالة على الشكل Function( Integer index, String html )‎ تُعيد سلسلة نصيّة من الكائن htmlString، أو عنصر أو عناصر DOM، أو عقدة أو عقد نصيّة، أو كائن jQuery المطلوب إدخالها بعد كل عنصر من مجموعة العناصر المُطابقة. يُمثِّل المعاملُ this العنصرَ الحالي. تستقبل فهرس موقع العنصر في المجموعة وقيمة html القديمة للعنصر كوسائط لها.

يُنفِّذ التّابعان ‎.after()‎ و ‎.insertAfter()‎ نفس المهمّة. يكمن الفرق الأكبر بينهما في الصّياغة وتحديدًا في موضع المحتوى والهدف. حيث يأتي المحتوى المطلوب إدخاله في التّابع ‎.after()‎ من وسيط التّابع:

$(target).after(contentToBeInserted)

بينما في التّابع ‎.insertAfter()‎ يسبق المحتوى التابع، ويضاف بعد ذلك الهدف، والذي يُمرَّر كوسيط للتابع:

$(contentToBeInserted).insertAfter(target)

فلنأخذ مثال HTML التّالي:

<div class="container">
  <h2>Greetings</h2>
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>

من المُمكِن إنشاء وإدخال المحتوى بعد عدّة عناصر في نفس الوقت:

$( ".inner" ).after( "<p>Test</p>" );

يحصل كل عنصر <div> لديه الصّنف inner على هذا المحتوى الجديد:

<div class="container">
  <h2>Greetings</h2>
  <div class="inner">Hello</div>
  <p>Test</p>
  <div class="inner">Goodbye</div>
  <p>Test</p>
</div>

يُمكِن اختيار عنصر ما في DOM وإدخاله بعد عنصر آخر:

$( ".container" ).after( $( "h2" ) );

إن اخترنا العنصر بهذه الطريقة وأدخلناه في مكان وحيد في DOM، فسيُنقَل إلى هذا المكان بدلًا من نسخه:

<div class="container">
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>
<h2>Greetings</h2>

ملاحظة مهمة: إن كان هنالك أكثر من عنصر هدف فستُنشَأ نُسخة من العنصر المُدخَل من أجل كل عنصر هدف ما عدا العنصر الأخير.

تمرير دالة

يدعم التّابع ‎.after()‎ بدءًا من إصدار jQuery 1.4 تمرير دالّة له تُعيد العناصر المطلوب إدخالها:

$( "p" ).after(function() {
  return "<div>" + this.className + "</div>";
});

يُدخِل المثال السّابق عنصر <div> بعد كلّ فقرة، مع احتواء عنصر <div> الجّديد على اسم صنف الفقرة التي تسبقه.

وسائط إضافية

يدعم التّابع ‎.after()‎ تمرير وسائط مُتعدِّدة كمُدخَلات له كما هو الحال مع توابع إضافة المحتوى الأخرى مثل ‎.prepend()‎ و ‎.before()‎، من المُدخلات المدعومة عناصر DOM، وكائنات jQuery، وسلاسل HTML النصيّة، ومصفوفات مُكوَّنة من عناصر DOM.

يُدخِل المثال التّالي عنصري <div> جديدين وعنصر <div> موجود حاليًّا بعد الفقرة الأولى:

var $newdiv1 = $( "<div id='object1'></div>" ),
  newdiv2 = document.createElement( "div" ),
  existingdiv1 = document.getElementById( "foo" );
 
$( "p" ).first().after( $newdiv1, [ newdiv2, existingdiv1 ] );

بما أنّ التابع ‎.after()‎ يقبل أي عدد من الوسائط الإضافيّة، فمن المُمكِن تحقيق نفس النتيجة عن طريق تمرير ثلاثة عناصر <div> على شكل ثلاثة وسائط مختلفة، كما يلي:

$( "p" ).first().after( $newdiv1, newdiv2, existingdiv1 )

يعتمد نوع وعدد الوسائط بشكل كبير على العناصر التي جُمِعَت في الشّيفرة.

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

  • قبل إصدار jQuery 1.9 كان التّابع ‎.after()‎ يُحاوِل إضافة أو تغيير العُقَد في مجموعة jQuery الحاليّة إن لم تكن العقدة الأولى من المجموعة مُتصلة بمستند ما، وفي هذه الحالة يُعيد التّابع مجموعة jQuery جديدة بدلًا من المجموعة الأصليّة. قد يُعيد التّابع أو لا يُعيد نتيجة جديدة اعتمادًا على عدد وسائطه أو على التّرابط بينها. بدءًا من إصدار jQuery 1.9 تُعيد التّوابع ‎.after()‎، و ‎.before()‎، و ‎.replaceWith()‎ دومًا المجموعة الأصليّة غير المُعدّلة، وليس هنالك أي تأثير لاستخدام هذه التّوابع على عقدة لا تملك عنصر أب (parent) لها، فلن تُغيَّر المجموعة أو العقد التي تحتويها.
  • من تصميم jQuery أنّ الدوال البانية والتوابع الخاصّة بها والتي تقبل سلاسل HTML نصيّة - مثل jQuery()‎، و append()‎.، و ‎‎‎.after()‎ - تملك القدرة على تنفيذ أي شيفرة، قد يحدث هذا عن طريق حقن العنصر <script> أو استخدام خاصيّات HTML التي تُنفِّذ الشيفرة (مثل ‎<img onload="">‎). لا تستخدم هذه التّوابع لإدخال سلاسل نصيّة قادمة من مصادر غير موثوقة مثل مُعامِلات استعلام الرّوابط (URL query parameters)، أو الكعكات (cookies)، أو حقول الإدخال. يُؤدِّي فعل ذلك إلى ثغرات من نوع cross-site-scripting (اختصارًا XSS). قم بعمل إزالة أو تهريب للمحارف (escape) المُدخَلة بواسطة المستخدم قبل إضافة المحتوى للمستند.

أمثلة

إدخال شيفرة HTML بعد كل الفقرات:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>after demo</title>
  <style>
  p {
    background: yellow;
  }
  </style>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<p>I would like to say: </p>
 
<script>
$( "p" ).after( "<b>Hello</b>" );
</script>
 
</body>
</html>

تجربة المثال:

I would like to say:

Hello

إدخال عنصر DOM بعد كل الفقرات:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>after demo</title>
  <style>
  p {
    background: yellow;
  }
  </style>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<p>I would like to say: </p>
 
<script>
$( "p" ).after( document.createTextNode( "Hello" ) );
</script>
 
</body>
</html>

تجربة المثال:

I would like to say:

Hello

إدخال كائن jQuery (مُشابِه لمصفوفة مُكوَّنة من عناصر DOM) بعد كل الفقرات <p>:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>after demo</title>
  <style>
  p {
    background: yellow;
  }
  </style>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<b>Hello</b>
<p>I would like to say: </p>
 
<script>
$( "p" ).after( $( "b" ) );
</script>
 
</body>
</html>

تجربة المثال:

I would like to say:

Hello

مصادر