الفرق بين المراجعتين لصفحة: «jQuery/attr»
Kinan-mawed (نقاش | مساهمات) طلا ملخص تعديل |
Kinan-mawed (نقاش | مساهمات) لا ملخص تعديل |
||
(9 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة) | |||
سطر 2: | سطر 2: | ||
يُستَخدَم التّابع <code>.attr()</code> للحصول على قيمة خاصيّة HTML لأوّل عنصر من مجموعة العناصر المُطابِقة، أو تعيين خاصيّة HTML أو عدة خاصيّات لكل عنصر مُطابِق. | يُستَخدَم التّابع <code>.attr()</code> للحصول على قيمة خاصيّة HTML لأوّل عنصر من مجموعة العناصر المُطابِقة، أو تعيين خاصيّة HTML أو عدة خاصيّات لكل عنصر مُطابِق. | ||
== attr( attributeName ). == | == <code>attr( attributeName ).</code> == | ||
=== القيمة المعادة === | === القيمة المعادة === | ||
[[JavaScript/String| | سلسلة نصيّة على شكل الكائن <code>[[JavaScript/String|String]]</code>. | ||
=== الوصف === | === الوصف === | ||
الحصول على قيمة خاصيّة HTML لأوّل عنصر من مجموعة العناصر المُطابِقة. | الحصول على قيمة خاصيّة HTML لأوّل عنصر من مجموعة العناصر المُطابِقة. | ||
=== attr( attributeName ). === | === <code>attr( attributeName ).</code> === | ||
أضيفت في الإصدار: 1.0. | أضيفت في الإصدار: 1.0. | ||
==== attributeName ==== | ==== <code>attributeName</code> ==== | ||
[[JavaScript/String| | سلسلة نصيّة من الكائن <code>[[JavaScript/String|String]]</code>، تُمثِّل اسم خاصيّة HTML المطلوب الحصول على قيمتها. | ||
يحصل التّابع <code>.attr()</code> على قيمة خاصيّة HTML لأول عنصر فقط من المجموعة المُطابقة. للحصول على القيمة لكل عنصر على حدة، استخدم بُنية حلقيّة كتوابع jQuery مثل <code>[[jQuery/each|.each()]]</code> أو <code>[[jQuery/map|.map()]]</code>. | يحصل التّابع <code>.attr()</code> على قيمة خاصيّة HTML لأول عنصر فقط من المجموعة المُطابقة. للحصول على القيمة لكل عنصر على حدة، استخدم بُنية حلقيّة كتوابع jQuery مثل <code>[[jQuery/each|.each()]]</code> أو <code>[[jQuery/map|.map()]]</code>. | ||
يمتلك استخدام التابع <code>.attr()</code> في jQuery للحصول على قيمة خاصيّة العنصر فائدتين رئيسيتين: | يمتلك استخدام التابع <code>.attr()</code> في jQuery للحصول على قيمة خاصيّة العنصر فائدتين رئيسيتين: | ||
# السّهولة: من الممكن استدعاء هذا التّابع مباشرةً على كائن jQuery وبشكل سلسلة مع توابع jQuery الأخرى. | # السّهولة: من الممكن استدعاء هذا التّابع مباشرةً على كائن [[jQuery/jQuery|jQuery]] وبشكل سلسلة مع توابع jQuery الأخرى. | ||
# التّوافقيّة عبر المتصفّحات: ترد تقارير عن عدم توافقيّة قيم بعض خاصيّات HTML عبر المتصفّحات، وحتى عبر إصدارات المتصفّح ذاته. يُقلِّل التّابع <code>.attr()</code> من مشاكل عدم التوافقيّة هذه. | # التّوافقيّة عبر المتصفّحات: ترد تقارير عن عدم توافقيّة قيم بعض خاصيّات HTML عبر المتصفّحات، وحتى عبر إصدارات المتصفّح ذاته. يُقلِّل التّابع <code>.attr()</code> من مشاكل عدم التوافقيّة هذه. | ||
ملاحظة: قيم خاصيّات HTML هي سلاسل نصّيّة باستثناء بعض الخاصيّات مثل <code>value</code> و<code>tabindex</code>. | '''ملاحظة:''' قيم خاصيّات HTML هي سلاسل نصّيّة باستثناء بعض الخاصيّات مثل <code>value</code> و<code>tabindex</code>. | ||
يُعيد التابع <code>.attr()</code> بدءًا من إصدار jQuery 1.6 القيمة <code>undefined</code> (غير مُعرَّف) لأجل خاصيّات HTML غير المُعيَّنة. للحصول على خاصيّات الكائن DOM وتغييرها مثل حالة عناصر الحقل <code>checked</code>، أو <code>selected</code>، أو <code>disabled</code>، فاستخدم التابع <code>[[jQuery/prop|.prop()]]</code>. | يُعيد التابع <code>.attr()</code> بدءًا من إصدار jQuery 1.6 القيمة <code>[[JavaScript/undefined|undefined]]</code> (غير مُعرَّف) لأجل خاصيّات HTML غير المُعيَّنة. للحصول على خاصيّات الكائن DOM وتغييرها مثل حالة عناصر الحقل <code>checked</code>، أو <code>selected</code>، أو <code>disabled</code>، فاستخدم التابع <code>[[jQuery/prop|.prop()]]</code>. | ||
=== الفرق بين خاصيات Attributes) HTML) وخاصيات الكائنات (Properties) === | === الفرق بين خاصيات Attributes) HTML) وخاصيات الكائنات (Properties) === | ||
سطر 34: | سطر 34: | ||
</syntaxhighlight>ولنفترض أنّه ضمن متغيّر JavaScript يُدعى <code>elem</code>: | </syntaxhighlight>ولنفترض أنّه ضمن متغيّر JavaScript يُدعى <code>elem</code>: | ||
{| class="wikitable" | {| class="wikitable" | ||
|elem.checked | |<code>elem.checked</code> | ||
|true (قيمة منطقيّة)، تتغيّر بحسب حالة صندوق التأشير. | |<code>true</code> (قيمة منطقيّة)، تتغيّر بحسب حالة صندوق التأشير. | ||
|- | |- | ||
|$( elem ).prop( "checked" ) | |<code>$( elem ).prop( "checked" )</code> | ||
|true (قيمة منطقيّة)، تتغيّر بحسب حالة صندوق التأشير. | |<code>true</code> (قيمة منطقيّة)، تتغيّر بحسب حالة صندوق التأشير. | ||
|- | |- | ||
|elem.getAttribute( "checked" ) | |<code>elem.getAttribute( "checked" )</code> | ||
|"checked" (سلسلة نصيّة)، الحالة المبدئيّة لصندوق التأشير، لا تتغيّر. | |<code>"checked"</code> (سلسلة نصيّة)، الحالة المبدئيّة لصندوق التأشير، لا تتغيّر. | ||
|- | |- | ||
|$( elem ).attr( "checked" ) (الإصدار 1.6) | |<code>$( elem ).attr( "checked" )</code> (الإصدار 1.6) | ||
|"checked" (سلسلة نصيّة)، الحالة المبدئيّة لصندوق التأشير لا تتغيّر. | |<code>"checked"</code> (سلسلة نصيّة)، الحالة المبدئيّة لصندوق التأشير لا تتغيّر. | ||
|- | |- | ||
|$( elem ).attr( "checked" ) (الإصدار 1.6.1+) | |<code>$( elem ).attr( "checked" )</code> (الإصدار 1.6.1+) | ||
|"checked" (سلسلة نصيّة)، تتغيّر بحسب حالة صندوق التأشير. | |<code>"checked"</code> (سلسلة نصيّة)، تتغيّر بحسب حالة صندوق التأشير. | ||
|- | |- | ||
|$( elem ).attr( "checked" ) (قبل الإصدار 1.6) | |<code>$( elem ).attr( "checked" )</code> (قبل الإصدار 1.6) | ||
|true (قيمة منطقيّة)، تتغيّر بحسب حالة صندوق التأشير. | |<code>true</code> (قيمة منطقيّة)، تتغيّر بحسب حالة صندوق التأشير. | ||
|} | |} | ||
وفقًا لمواصفة النماذج في [https://www.w3.org/TR/html401/interact/forms.html#h-17.4 W3C] فإنّ خاصيّة HTML <code>checked</code> هي عبارة عن [https://www.w3.org/TR/html4/intro/sgmltut.html#h-3.3.4.2 خاصيّة منطقيّة (boolean attribute)]، ممّا يعني أنّ خاصيّة الكائن الموافقة لها تكون قيمتها <code>true</code> بمجرّد وجود خاصيّة HTML، حتى ولو لم تكن تملك أي قيمة أو كانت قيمتها سلسلة نصيّة فارغة، أو كانت قيمتها <code>false</code>، وينطبق هذا على جميع خاصيّات HTML المنطقيّة. | وفقًا لمواصفة النماذج في [https://www.w3.org/TR/html401/interact/forms.html#h-17.4 W3C] فإنّ خاصيّة HTML <code>checked</code> هي عبارة عن [https://www.w3.org/TR/html4/intro/sgmltut.html#h-3.3.4.2 خاصيّة منطقيّة (boolean attribute)]، ممّا يعني أنّ خاصيّة الكائن الموافقة لها تكون قيمتها <code>true</code> بمجرّد وجود خاصيّة HTML، حتى ولو لم تكن تملك أي قيمة أو كانت قيمتها سلسلة نصيّة فارغة، أو كانت قيمتها <code>false</code>، وينطبق هذا على جميع خاصيّات HTML المنطقيّة. | ||
على أيّة حال أهم مفهوم يجب تذكره عن خاصيّة HTML <code>checked</code> أنّها لا تتوافق مع خاصيّة الكائن <code>checked</code>، بل في الحقيقة تتوافق مع خاصيّة الكائن <code>defaultChecked</code> ويجب أن تُستخدَم لتعيين القيمة الافتراضيّة لصندوق التأشير فلا تتغيّر خاصيّة HTML <code>checked</code> تبعًا لحالة | على أيّة حال أهم مفهوم يجب تذكره عن خاصيّة HTML <code>checked</code> أنّها لا تتوافق مع خاصيّة الكائن <code>checked</code>، بل في الحقيقة تتوافق مع خاصيّة الكائن <code>defaultChecked</code> ويجب أن تُستخدَم لتعيين القيمة الافتراضيّة لصندوق التأشير فلا تتغيّر خاصيّة HTML <code>checked</code> تبعًا لحالة صندوق التأشير، بينما تتغيّر خاصيّة الكائن <code>checked</code> بحسب حالته، لذلك فإنّ استخدام خاصيّة الكائن هي الطريقة الأكثر توافقيّة عبر المتصفّحات لتحديد ما إذا كان صندوق التأشير مُحدَّدًا: | ||
* if ( elem.checked ) | * <code>if ( elem.checked )</code> | ||
* if ( $( elem ).prop( "checked" ) ) | * <code>if ( $( elem ).prop( "checked" ) )</code> | ||
* if ( $( elem ).is( ":checked" ) ) | * <code>if ( $( elem ).is( ":checked" ) )</code> | ||
وينطبق هذا على خاصيّات HTML المتغيّرة الأخرى مثل <code>selected</code> و <code>value</code>. | وينطبق هذا على خاصيّات HTML المتغيّرة الأخرى مثل <code>selected</code> و <code>value</code>. | ||
=== ملاحظات إضافية === | === ملاحظات إضافية === | ||
يؤدّي استخدام التّابع <code>[[ | يؤدّي استخدام التّابع <code>[[jQuery/prop|.prop()]]</code> في متصفّح Internet Explorer قبل الإصدار التاسع من أجل تعيين خاصيّة كائن لعنصر DOM إلى أي شيء بخلاف قيمة أولية بسيطة (مثل عدد، أو سلسلة نصيّة، أو قيمة منطقيّة) إلى تسريب في الذاكرة (memory leak) إن لم تُزال خاصيّة الكائن (باستخدام التّابع <code>[[jQuery/removeProp|.removeProp()]]</code>) وذلك قبل إزالة عنصر DOM من المستند. ولتعيين قيم كائنات DOM بأمان دون حدوث تسريبات في الذّاكرة استخدم التّابع <code>[[jQuery/data|.data()]]</code>. | ||
=== أمثلة === | === أمثلة === | ||
سطر 69: | سطر 69: | ||
<head> | <head> | ||
<meta charset="utf-8"> | <meta charset="utf-8"> | ||
<title>attr | <title>attr مثال عن التابع</title> | ||
<style> | <style> | ||
p { | p { | ||
سطر 83: | سطر 83: | ||
<input id="check1" type="checkbox" checked="checked"> | <input id="check1" type="checkbox" checked="checked"> | ||
<label for="check1"> | <label for="check1">حدد مربع التأشير</label> | ||
<p></p> | <p></p> | ||
سطر 104: | سطر 104: | ||
.prop( 'checked' ): true | .prop( 'checked' ): true | ||
.is( ':checked' ): true | .is( ':checked' ): true | ||
</syntaxhighlight>إيجاد خاصيّة HTML للعنوان (title) لأول عنصر <code><nowiki><em></nowiki></code> في الصّفحة:<syntaxhighlight lang="html"> | </syntaxhighlight>إيجاد خاصيّة HTML للعنوان (title) لأول عنصر <code>[[HTML/em|<nowiki><em></nowiki>]]</code> في الصّفحة:<syntaxhighlight lang="html"> | ||
<!doctype html> | <!doctype html> | ||
<html lang="en"> | <html lang="en"> | ||
سطر 123: | سطر 123: | ||
<body> | <body> | ||
<p> | <p>إيجاد قيمة خاصية العنوان <em title="huge, gigantic">لأول عنصر em</em> في الصفحة.</p> | ||
عنوان عنصر em هو: <div></div> | |||
<script> | <script> | ||
سطر 136: | سطر 136: | ||
</syntaxhighlight>تجربة المثال:<syntaxhighlight lang="text"> | </syntaxhighlight>تجربة المثال:<syntaxhighlight lang="text"> | ||
إيجاد قيمة خاصية العنوان لأول عنصر em في الصفحة: | |||
عنوان عنصر em هو: | |||
huge, gigantic | huge, gigantic | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== attr( attributeName, value ). == | == <code>attr( attributeName, value ).</code> == | ||
=== القيمة المعادة === | === القيمة المعادة === | ||
[ | كائن [[jQuery/jQuery|jQuery]]. | ||
=== الوصف === | === الوصف === | ||
تعيين قيمة خاصيّة HTML واحدة أو أكثر لمجموعة العناصر المُطابِقة. | تعيين قيمة خاصيّة HTML واحدة أو أكثر لمجموعة العناصر المُطابِقة. | ||
=== attr( attributeName, value ). === | === <code>attr( attributeName, value ).</code> === | ||
أضيفت في الإصدار: 1.0. | أضيفت في الإصدار: 1.0. | ||
==== attributeName ==== | ==== <code>attributeName</code> ==== | ||
[[JavaScript/String|سلسلة نصيّة من الكائن String]]، وتمثِّل اسم خاصيّة HTML المطلوب تعيينها. | [[JavaScript/String|سلسلة نصيّة من الكائن String]]، وتمثِّل اسم خاصيّة HTML المطلوب تعيينها. | ||
==== value ==== | ==== <code>value</code> ==== | ||
سلسلة نصيّة أو عدد أو Null، وتُمثِّل القيمة المطلوب تعيينها لخاصيّة HTML، إن كانت <code>null</code> فستُزال خاصيّة HTML المُحدَّدة (كما يحدث عند استخدام التّابع <code>[[jQuery/removeAttr|.removeAttr()]]</code>). | سلسلة نصيّة أو عدد أو Null، وتُمثِّل القيمة المطلوب تعيينها لخاصيّة HTML، إن كانت <code>null</code> فستُزال خاصيّة HTML المُحدَّدة (كما يحدث عند استخدام التّابع <code>[[jQuery/removeAttr|.removeAttr()]]</code>). | ||
=== attr( attributes ). === | === <code>attr( attributes ).</code> === | ||
أضيفت في الإصدار: 1.0. | أضيفت في الإصدار: 1.0. | ||
==== attributes ==== | ==== <code>attributes</code> ==== | ||
[[JavaScript/Object|كائن مُجرَّد (PlainObject)]]، يمثّل أزواج قيمة-خاصيّة المطلوب تعيينها. | [[JavaScript/Object|كائن مُجرَّد (PlainObject)]]، يمثّل أزواج قيمة-خاصيّة المطلوب تعيينها. | ||
=== attr( attributeName, function ). === | === <code>attr( attributeName, function ).</code> === | ||
أضيفت في الإصدار: 1.1. | أضيفت في الإصدار: 1.1. | ||
==== attributeName ==== | ==== <code>attributeName</code> ==== | ||
[[JavaScript/String| | سلسلة نصيّة من الكائن <code>[[JavaScript/String|String]]</code>، تُمثِّل اسم خاصيّة HTML المطلوب تعيينها. | ||
==== function ==== | ==== <code>function</code> ==== | ||
دالة على الشكل [[JavaScript/Function|Function]]( [[JavaScript/Integer|Integer]] index, [[JavaScript/String|String]] attr )، وتُعيد سلسلةً نصيّةً أو عددًا. وهذه القيمة المعادة ستُحدِّد ما هي القيمة المطلوب تعيينها، <code>this</code> هو العنصر الحالي. تستقبل فهرس موقع العنصر في المجموعة وخاصيّة HTML القديمة كوسائط لها. | دالة على الشكل <code>[[JavaScript/Function|Function]]( [[JavaScript/Integer|Integer]] index, [[JavaScript/String|String]] attr )</code>، وتُعيد سلسلةً نصيّةً أو عددًا. وهذه القيمة المعادة ستُحدِّد ما هي القيمة المطلوب تعيينها، <code>this</code> هو العنصر الحالي. تستقبل فهرس موقع العنصر في المجموعة وخاصيّة HTML القديمة كوسائط لها. | ||
يُعد التّابع <code>.attr()</code> طريقة مثاليّة لتعيين قيم خاصيّات HTML، خاصّةً عند تعيين خاصيّات متعدّدة أو استخدام قيم مُعادَة من دالة ما، فلنأخذ هذه الصّورة كمثال:<syntaxhighlight lang="html"> | يُعد التّابع <code>.attr()</code> طريقة مثاليّة لتعيين قيم خاصيّات HTML، خاصّةً عند تعيين خاصيّات متعدّدة أو استخدام قيم مُعادَة من دالة ما، فلنأخذ هذه الصّورة كمثال:<syntaxhighlight lang="html"> | ||
سطر 198: | سطر 198: | ||
'''تحذير:''' يجب استخدام علامات الاقتباس دومًا عند تعيين قيمة الخاصيّة <code>class</code>. | '''تحذير:''' يجب استخدام علامات الاقتباس دومًا عند تعيين قيمة الخاصيّة <code>class</code>. | ||
'''ملاحظة:''' تؤدّي محاولة تغيير الخاصيّة <code>type</code> للعنصرين <code>input</code> أو <code>button</code> المُنشَأين عبر <code>document.createElement()</code> إلى رمي استثناء في إصدار Internet Explorer 8 فما قبل. | '''ملاحظة:''' تؤدّي محاولة تغيير الخاصيّة <code>type</code> للعنصرين <code>input</code> أو <code>button</code> المُنشَأين عبر <code>document.[[JavaScript/Document/createElement|createElement]]()</code> إلى رمي استثناء في إصدار Internet Explorer 8 فما قبل. | ||
=== قيم خاصيات HTML المحسوبة === | === قيم خاصيات HTML المحسوبة === | ||
سطر 209: | سطر 209: | ||
</syntaxhighlight>يكون استخدام الدالة لحساب قيم خاصيّات HTML مُفيدًا بشكل خاص عند تعديل خاصيّات HTML لعناصر متعدّدة معًا. | </syntaxhighlight>يكون استخدام الدالة لحساب قيم خاصيّات HTML مُفيدًا بشكل خاص عند تعديل خاصيّات HTML لعناصر متعدّدة معًا. | ||
ملاحظة: إن لم تُرجِع دالة التعيين (أي <code>function(index, attr){}</code>) أي قيمة أو أعادت القيمة <code>undefined</code>، فالقيمة الحاليّة لم تتغيّر. يُفيدنا هذا لتعيين القيم بشكل انتقائي عند تحقّق معايير مُعيّنة فقط. | '''ملاحظة:''' إن لم تُرجِع دالة التعيين (أي <code>function(index, attr){}</code>) أي قيمة أو أعادت القيمة <code>[[JavaScript/undefined|undefined]]</code>، فالقيمة الحاليّة لم تتغيّر. يُفيدنا هذا لتعيين القيم بشكل انتقائي عند تحقّق معايير مُعيّنة فقط. | ||
=== أمثلة === | === أمثلة === | ||
سطر 217: | سطر 217: | ||
<head> | <head> | ||
<meta charset="utf-8"> | <meta charset="utf-8"> | ||
<title>attr | <title>attr مثال عن التابع</title> | ||
<style> | <style> | ||
img { | img { | ||
سطر 235: | سطر 235: | ||
<img> | <img> | ||
<div><b> | <div><b>خاصيّات Ajax</b></div> | ||
<script> | <script> | ||
سطر 249: | سطر 249: | ||
</html> | </html> | ||
</syntaxhighlight>تعيين المُعرِّف id لعناصر div بناءً على موقعها في الصّفحة:<syntaxhighlight lang="html"> | </syntaxhighlight>تعيين المُعرِّف <code>id</code> لعناصر <code>[[HTML/div|<nowiki><div></nowiki>]]</code> بناءً على موقعها في الصّفحة:<syntaxhighlight lang="html"> | ||
<!doctype html> | <!doctype html> | ||
<html lang="en"> | <html lang="en"> | ||
<head> | <head> | ||
<meta charset="utf-8"> | <meta charset="utf-8"> | ||
<title>attr | <title>attr مثال عن التابع</title> | ||
<style> | <style> | ||
div { | div { | ||
سطر 270: | سطر 270: | ||
<body> | <body> | ||
<div> | <div>العنصر صفر <span></span></div> | ||
<div> | <div>العنصر الأول <span></span></div> | ||
<div> | <div>العنصر الثاني <span></span></div> | ||
<script> | <script> | ||
سطر 288: | سطر 288: | ||
</syntaxhighlight>تجربة المثال:<syntaxhighlight lang="text"> | </syntaxhighlight>تجربة المثال:<syntaxhighlight lang="text"> | ||
العنصر صفر (id = 'div-id0') | |||
العنصر الأول (id = 'div-id1') | |||
العنصر الثاني (id = 'div-id2') | |||
</syntaxhighlight>تعيين خاصيّة <code>src</code> للصورة انطلاقًا من خاصيّة <code>title</code> لها:<syntaxhighlight lang="html"> | </syntaxhighlight>تعيين خاصيّة <code>src</code> للصورة انطلاقًا من خاصيّة <code>title</code> لها:<syntaxhighlight lang="html"> | ||
<!doctype html> | <!doctype html> | ||
سطر 296: | سطر 296: | ||
<head> | <head> | ||
<meta charset="utf-8"> | <meta charset="utf-8"> | ||
<title>attr | <title>attr مثال عن التابع</title> | ||
<script src="https://code.jquery.com/jquery-1.10.2.js"></script> | <script src="https://code.jquery.com/jquery-1.10.2.js"></script> | ||
</head> | </head> | ||
سطر 316: | سطر 316: | ||
== مصادر == | == مصادر == | ||
* [http://api.jquery.com/attr/ صفحة التابع .attr() في توثيق jQuery الرسمي]. | * [http://api.jquery.com/attr/ صفحة التابع .attr() في توثيق jQuery الرسمي]. | ||
[[تصنيف:jQuery]] | |||
[[تصنيف:jQuery Method]] | |||
[[تصنيف:jQuery Attributes]] | |||
[[تصنيف:jQuery Manipulation]] |
المراجعة الحالية بتاريخ 23:58، 1 يونيو 2018
يُستَخدَم التّابع .attr()
للحصول على قيمة خاصيّة HTML لأوّل عنصر من مجموعة العناصر المُطابِقة، أو تعيين خاصيّة HTML أو عدة خاصيّات لكل عنصر مُطابِق.
attr( attributeName ).
القيمة المعادة
سلسلة نصيّة على شكل الكائن String
.
الوصف
الحصول على قيمة خاصيّة HTML لأوّل عنصر من مجموعة العناصر المُطابِقة.
attr( attributeName ).
أضيفت في الإصدار: 1.0.
attributeName
سلسلة نصيّة من الكائن String
، تُمثِّل اسم خاصيّة HTML المطلوب الحصول على قيمتها.
يحصل التّابع .attr()
على قيمة خاصيّة HTML لأول عنصر فقط من المجموعة المُطابقة. للحصول على القيمة لكل عنصر على حدة، استخدم بُنية حلقيّة كتوابع jQuery مثل .each()
أو .map()
.
يمتلك استخدام التابع .attr()
في jQuery للحصول على قيمة خاصيّة العنصر فائدتين رئيسيتين:
- السّهولة: من الممكن استدعاء هذا التّابع مباشرةً على كائن jQuery وبشكل سلسلة مع توابع jQuery الأخرى.
- التّوافقيّة عبر المتصفّحات: ترد تقارير عن عدم توافقيّة قيم بعض خاصيّات HTML عبر المتصفّحات، وحتى عبر إصدارات المتصفّح ذاته. يُقلِّل التّابع
.attr()
من مشاكل عدم التوافقيّة هذه.
ملاحظة: قيم خاصيّات HTML هي سلاسل نصّيّة باستثناء بعض الخاصيّات مثل value
وtabindex
.
يُعيد التابع .attr()
بدءًا من إصدار jQuery 1.6 القيمة undefined
(غير مُعرَّف) لأجل خاصيّات HTML غير المُعيَّنة. للحصول على خاصيّات الكائن DOM وتغييرها مثل حالة عناصر الحقل checked
، أو selected
، أو disabled
، فاستخدم التابع .prop()
.
الفرق بين خاصيات Attributes) HTML) وخاصيات الكائنات (Properties)
يكون الفرق بين خاصيّات HTML وخاصيّات الكائنات مهمًا في بعض الحالات، فقبل الإصدار jQuery 1.6 كان التابع .attr()
يأخذ أحيانًا بالحسبان قيم خاصيّات الكائنات عند محاولة الحصول على قيم بعض خاصيّات HTML، ممّا قد يُسبِّب سلوكًا غير متناسق. بدءًا من الإصدار jQuery 1.6 أصبح التّابع .prop()
يُزوِّدنا بطريقة للحصول على قيم خاصيّات الكائنات تحديدًا، بينما يعيد التّابعُ .attr()
خاصيّات HTML.
على سبيل المثال ينبغي استرجاع خاصيّات الكائنات selectedIndex
، و tagName
، و nodeName
، و nodeType
، و ownerDocument
، و defaultChecked
، و defaultSelected
عن طريق التابع .prop()
. قبل إصدار jQuery 1.6 كان من الممكن استرجاع خاصيّات الكائنات هذه عبر التّابع .attr()
، ولكن لم يكن هذا من ضمن مجال .attr()
، فلا تملك خاصيّات الكائنات هذه خاصيّات HTML مُوافِقة لها وهي عبارة عن خاصيّات للكائنات فقط.
فيما يتعلّق بخاصيّات HTML المنطقيّة فلنفترض وجود عنصر DOM مُعرَّف عن طريق عنصر HTML التالي:
<input type="checkbox" checked="checked">
ولنفترض أنّه ضمن متغيّر JavaScript يُدعى elem
:
elem.checked
|
true (قيمة منطقيّة)، تتغيّر بحسب حالة صندوق التأشير.
|
$( elem ).prop( "checked" )
|
true (قيمة منطقيّة)، تتغيّر بحسب حالة صندوق التأشير.
|
elem.getAttribute( "checked" )
|
"checked" (سلسلة نصيّة)، الحالة المبدئيّة لصندوق التأشير، لا تتغيّر.
|
$( elem ).attr( "checked" ) (الإصدار 1.6)
|
"checked" (سلسلة نصيّة)، الحالة المبدئيّة لصندوق التأشير لا تتغيّر.
|
$( elem ).attr( "checked" ) (الإصدار 1.6.1+)
|
"checked" (سلسلة نصيّة)، تتغيّر بحسب حالة صندوق التأشير.
|
$( elem ).attr( "checked" ) (قبل الإصدار 1.6)
|
true (قيمة منطقيّة)، تتغيّر بحسب حالة صندوق التأشير.
|
وفقًا لمواصفة النماذج في W3C فإنّ خاصيّة HTML checked
هي عبارة عن خاصيّة منطقيّة (boolean attribute)، ممّا يعني أنّ خاصيّة الكائن الموافقة لها تكون قيمتها true
بمجرّد وجود خاصيّة HTML، حتى ولو لم تكن تملك أي قيمة أو كانت قيمتها سلسلة نصيّة فارغة، أو كانت قيمتها false
، وينطبق هذا على جميع خاصيّات HTML المنطقيّة.
على أيّة حال أهم مفهوم يجب تذكره عن خاصيّة HTML checked
أنّها لا تتوافق مع خاصيّة الكائن checked
، بل في الحقيقة تتوافق مع خاصيّة الكائن defaultChecked
ويجب أن تُستخدَم لتعيين القيمة الافتراضيّة لصندوق التأشير فلا تتغيّر خاصيّة HTML checked
تبعًا لحالة صندوق التأشير، بينما تتغيّر خاصيّة الكائن checked
بحسب حالته، لذلك فإنّ استخدام خاصيّة الكائن هي الطريقة الأكثر توافقيّة عبر المتصفّحات لتحديد ما إذا كان صندوق التأشير مُحدَّدًا:
if ( elem.checked )
if ( $( elem ).prop( "checked" ) )
if ( $( elem ).is( ":checked" ) )
وينطبق هذا على خاصيّات HTML المتغيّرة الأخرى مثل selected
و value
.
ملاحظات إضافية
يؤدّي استخدام التّابع .prop()
في متصفّح Internet Explorer قبل الإصدار التاسع من أجل تعيين خاصيّة كائن لعنصر DOM إلى أي شيء بخلاف قيمة أولية بسيطة (مثل عدد، أو سلسلة نصيّة، أو قيمة منطقيّة) إلى تسريب في الذاكرة (memory leak) إن لم تُزال خاصيّة الكائن (باستخدام التّابع .removeProp()
) وذلك قبل إزالة عنصر DOM من المستند. ولتعيين قيم كائنات DOM بأمان دون حدوث تسريبات في الذّاكرة استخدم التّابع .data()
.
أمثلة
عرض خاصيّة HTML checked
وخاصيّة الكائن لصندوق التأشير بينما تتغيّر:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>attr مثال عن التابع</title>
<style>
p {
margin: 20px 0 0;
}
b {
color: blue;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<input id="check1" type="checkbox" checked="checked">
<label for="check1">حدد مربع التأشير</label>
<p></p>
<script>
$( "input" )
.change(function() {
var $input = $( this );
$( "p" ).html( ".attr( 'checked' ): <b>" + $input.attr( "checked" ) + "</b><br>" +
".prop( 'checked' ): <b>" + $input.prop( "checked" ) + "</b><br>" +
".is( ':checked' ): <b>" + $input.is( ":checked" ) + "</b>" );
})
.change();
</script>
</body>
</html>
تجربة المثال:
.attr( 'checked' ): checked
.prop( 'checked' ): true
.is( ':checked' ): true
إيجاد خاصيّة HTML للعنوان (title) لأول عنصر <em>
في الصّفحة:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>attr demo</title>
<style>
em {
color: blue;
font-weight: bold;
}
div {
color: red;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<p>إيجاد قيمة خاصية العنوان <em title="huge, gigantic">لأول عنصر em</em> في الصفحة.</p>
عنوان عنصر em هو: <div></div>
<script>
var title = $( "em" ).attr( "title" );
$( "div" ).text( title );
</script>
</body>
</html>
تجربة المثال:
إيجاد قيمة خاصية العنوان لأول عنصر em في الصفحة:
عنوان عنصر em هو:
huge, gigantic
attr( attributeName, value ).
القيمة المعادة
كائن jQuery.
الوصف
تعيين قيمة خاصيّة HTML واحدة أو أكثر لمجموعة العناصر المُطابِقة.
attr( attributeName, value ).
أضيفت في الإصدار: 1.0.
attributeName
سلسلة نصيّة من الكائن String، وتمثِّل اسم خاصيّة HTML المطلوب تعيينها.
value
سلسلة نصيّة أو عدد أو Null، وتُمثِّل القيمة المطلوب تعيينها لخاصيّة HTML، إن كانت null
فستُزال خاصيّة HTML المُحدَّدة (كما يحدث عند استخدام التّابع .removeAttr()
).
attr( attributes ).
أضيفت في الإصدار: 1.0.
attributes
كائن مُجرَّد (PlainObject)، يمثّل أزواج قيمة-خاصيّة المطلوب تعيينها.
attr( attributeName, function ).
أضيفت في الإصدار: 1.1.
attributeName
سلسلة نصيّة من الكائن String
، تُمثِّل اسم خاصيّة HTML المطلوب تعيينها.
function
دالة على الشكل Function( Integer index, String attr )
، وتُعيد سلسلةً نصيّةً أو عددًا. وهذه القيمة المعادة ستُحدِّد ما هي القيمة المطلوب تعيينها، this
هو العنصر الحالي. تستقبل فهرس موقع العنصر في المجموعة وخاصيّة HTML القديمة كوسائط لها.
يُعد التّابع .attr()
طريقة مثاليّة لتعيين قيم خاصيّات HTML، خاصّةً عند تعيين خاصيّات متعدّدة أو استخدام قيم مُعادَة من دالة ما، فلنأخذ هذه الصّورة كمثال:
<img id="greatphoto" src="brush-seller.jpg" alt="brush seller">
تعيين خاصية HTML بسيطة
لتغيير الخاصيّة alt
، مرِّر ببساطة اسمها وقيمتها الجديدة إلى التّابع .attr()
:
$( "#greatphoto" ).attr( "alt", "Beijing Brush Seller" );
أضف خاصيّة HTML جديدة للصورة بنفس الطريقة:
$( "#greatphoto" ).attr( "title", "Photo by Kelly Clark" );
تعيين خاصيات HTML متعددة بنفس الوقت
لتغيير الخاصيّة alt
وإضافة الخاصيّة title
بنفس الوقت، مرِّر اسمهما وقيمتهما إلى التّابع دفعةً واحدة باستخدام كائن JavaScript مُجرَّد، يُضيف كل زوج قيمة-مفتاح من الكائن خاصيّة HTML أو يُعدِّلها:
$( "#greatphoto" ).attr({
alt: "Beijing Brush Seller",
title: "photo by Kelly Clark"
});
عند تعيين قيم خاصيّات HTML متعدّدة يُصبح استخدام علامتي الاقتباس حول اسم خاصيّات HTML اختياريًّا.
تحذير: يجب استخدام علامات الاقتباس دومًا عند تعيين قيمة الخاصيّة class
.
ملاحظة: تؤدّي محاولة تغيير الخاصيّة type
للعنصرين input
أو button
المُنشَأين عبر document.createElement()
إلى رمي استثناء في إصدار Internet Explorer 8 فما قبل.
قيم خاصيات HTML المحسوبة
نستطيع باستخدام دالة لتعيين خاصيّات HTML أن نحسب القيمة بناءً على خصائص أخرى للعنصر، على سبيل المثال بإمكاننا جمع قيمة جديدة مع قيمة موجودة مُسبقًا:
$( "#greatphoto" ).attr( "title", function( i, val ) {
return val + " - photo by Kelly Clark";
});
يكون استخدام الدالة لحساب قيم خاصيّات HTML مُفيدًا بشكل خاص عند تعديل خاصيّات HTML لعناصر متعدّدة معًا.
ملاحظة: إن لم تُرجِع دالة التعيين (أي function(index, attr){}
) أي قيمة أو أعادت القيمة undefined
، فالقيمة الحاليّة لم تتغيّر. يُفيدنا هذا لتعيين القيم بشكل انتقائي عند تحقّق معايير مُعيّنة فقط.
أمثلة
تعيين بعض خاصيّات HTML لكافة الصّور في الصّفحة:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>attr مثال عن التابع</title>
<style>
img {
padding: 10px;
}
div {
color: red;
font-size: 24px;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<img>
<img>
<img>
<div><b>خاصيّات Ajax</b></div>
<script>
$( "img" ).attr({
src: "/resources/hat.gif",
title: "jQuery",
alt: "jQuery Logo"
});
$( "div" ).text( $( "img" ).attr( "alt" ) );
</script>
</body>
</html>
تعيين المُعرِّف id
لعناصر <div>
بناءً على موقعها في الصّفحة:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>attr مثال عن التابع</title>
<style>
div {
color: blue;
}
span {
color: red;
}
b {
font-weight: bolder;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<div>العنصر صفر <span></span></div>
<div>العنصر الأول <span></span></div>
<div>العنصر الثاني <span></span></div>
<script>
$( "div" )
.attr( "id", function( arr ) {
return "div-id" + arr;
})
.each(function() {
$( "span", this ).html( "(id = '<b>" + this.id + "</b>')" );
});
</script>
</body>
</html>
تجربة المثال:
العنصر صفر (id = 'div-id0')
العنصر الأول (id = 'div-id1')
العنصر الثاني (id = 'div-id2')
تعيين خاصيّة src
للصورة انطلاقًا من خاصيّة title
لها:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>attr مثال عن التابع</title>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<img title="hat.gif">
<script>
$( "img" ).attr( "src", function() {
return "/resources/" + this.title;
});
</script>
</body>
</html>