الفرق بين المراجعتين لصفحة: «JavaScript/Document/querySelectorAll»

من موسوعة حسوب
إضافة الصّفحة
 
لا ملخص تعديل
سطر 9: سطر 9:
</syntaxhighlight>
</syntaxhighlight>


===المعاملات===
===<code>selectors‎</code>===
====<code>selectors‎</code>====
سلسلة نصيّة من النّوع <code>[[JavaScript/DOMString|DOMString]]</code> تحتوي على مُحدّد واحدٍ أو أكثر لمُوافقته مع عناصر المستند والبحث عن العنصر المرغوب. يجب على هذه السّلسلة النّصيّة أن تكون مُحدّد CSS صالح، إن لم يكن كذلك، فسيُرمى استثناء <code>[[JavaScript/SyntaxError|SyntaxError]]</code>، انظر [https://developer.mozilla.org/en-US/docs/Web/API/Document_object_model/Locating_DOM_elements_using_selectors هذه الصّفحة] للمزيد حول المُحدّدات وكيفيّة إدارتها. يُمكن تحديد عدّة محدّدات عبر فصلها بفاصلة (,).
سلسلة نصيّة من النّوع <code>[[JavaScript/DOMString|DOMString]]</code> تحتوي على مُحدّد واحدٍ أو أكثر لمُوافقته مع عناصر المستند والبحث عن العنصر المرغوب. يجب على هذه السّلسلة النّصيّة أن تكون مُحدّد CSS صالح، إن لم يكن كذلك، فسيُرمى استثناء <code>SyntaxError</code>، انظر [https://developer.mozilla.org/en-US/docs/Web/API/Document_object_model/Locating_DOM_elements_using_selectors هذه الصّفحة] للمزيد حول المُحدّدات وكيفيّة إدارتها. يُمكن تحديد عدّة محدّدات عبر فصلها بفاصلة (,).


'''مُلاحظة:''' يجب تهريب (escaping) المحارف التي ليست جزءًا من بنية CSS العامّة باستعمال محرف \. ولأنّ JavaScript تستعمل كذلك المحرف \ لتهريب المحارف، فيجب كتابة السلاسل النّصيّة الحرفيّة بعنايةٍ خاصّةٍ عند استعمال هذه المحارف. انظر [[JavaScript/Document/querySelector#.D8.AA.D9.87.D8.B1.D9.8A.D8.A8_.D8.A7.D9.84.D9.85.D8.AD.D8.A7.D8.B1.D9.81_.D8.A7.D9.84.D8.AE.D8.A7.D8.B5.D9.91.D8.A9|فقرة تهريب المحارف الخاصّة في هذه الصّفحة]].
'''مُلاحظة:''' يجب تهريب (escaping) المحارف التي ليست جزءًا من بنية CSS العامّة باستعمال محرف \. ولأنّ JavaScript تستعمل كذلك المحرف \ لتهريب المحارف، فيجب كتابة السلاسل النّصيّة الحرفيّة بعنايةٍ خاصّةٍ عند استعمال هذه المحارف. انظر [[JavaScript/Document/querySelector#.D8.AA.D9.87.D8.B1.D9.8A.D8.A8_.D8.A7.D9.84.D9.85.D8.AD.D8.A7.D8.B1.D9.81_.D8.A7.D9.84.D8.AE.D8.A7.D8.B5.D9.91.D8.A9|فقرة تهريب المحارف الخاصّة في هذه الصّفحة]].
سطر 18: سطر 17:
كائنٌ غير حيّ من النّوع <code>[[JavaScript/NodeList|NodeList]]</code> يحتوي كائنًا واحدًا من النّوع  <code>[[JavaScript/Element|Element]]</code> لكلّ عنصرٍ يوافق واحدًا على الأقل من المُحدّدات المُعطاة.
كائنٌ غير حيّ من النّوع <code>[[JavaScript/NodeList|NodeList]]</code> يحتوي كائنًا واحدًا من النّوع  <code>[[JavaScript/Element|Element]]</code> لكلّ عنصرٍ يوافق واحدًا على الأقل من المُحدّدات المُعطاة.


'''مُلاحظة:''' إن كانت المحدّدات <code>selectors</code> تشمل [[CSS#.D8.A7.D9.84.D8.B9.D9.86.D8.A7.D8.B5.D8.B1_.D8.A7.D9.84.D8.B2.D8.A7.D8.A6.D9.81.D8.A9|عنصر CSS زائف]]، فالقائمة المُعادة ستكون دائمًا فارغة.
'''مُلاحظة:''' إن كانت المحدّدات <code>selectors</code> تشمل [[:تصنيف:CSS pseudo-element|عنصر CSS زائف]]، فالقائمة المُعادة ستكون دائمًا فارغة.


===الاستثناءات===
===الاستثناءات===
====<code>SyntaxError‎</code>====
====<code>SyntaxError‎</code>====
يُرمى في حالة كانت بنية المُحدّدات <code>selectors‎</code> خاطئة.
يُرمى في حالة كانت بنية المُحدّدات <code>selectors‎</code> خطأ.


==أمثلة==
==أمثلة==
===الحصول على قائمة عناصر موافقة===
===الحصول على قائمة عناصر موافقة===
للحصول على كائن <code>[[JavaScript/NodeList|NodeList]]</code> لجميع عناصر  <code>‎<nowiki><p></nowiki>‎‎</code> في المستند:
للحصول على كائن <code>[[JavaScript/NodeList|NodeList]]</code> لجميع عناصر  <code>‎[[HTML/p|<nowiki><p></nowiki>‎‎]]</code> في المستند:
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
var matches = document.querySelectorAll("p");
var matches = document.querySelectorAll("p");
سطر 63: سطر 62:
==ملاحظات==
==ملاحظات==
يعمل التّابع <code>querySelectorAll‎()‎</code> بشكلٍ مختلف عن معظم مكتبات JavaScript التي تُستعمل للتّعامل مع DOM، ما قد يؤدّي إلى نتائج غير متوقّعة.
يعمل التّابع <code>querySelectorAll‎()‎</code> بشكلٍ مختلف عن معظم مكتبات JavaScript التي تُستعمل للتّعامل مع DOM، ما قد يؤدّي إلى نتائج غير متوقّعة.
لنضع كمثال مستند HTML ذو 3 عناصر <code>[[HTML/div|<nowiki><div></nowiki>]]</code> متداخلة هذا:
 
لنضع كمثال مستند HTML ذو ثلاثة عناصر <code>[[HTML/div|<nowiki><div></nowiki>]]</code> متداخلة هكذا:
<syntaxhighlight lang="html">
<syntaxhighlight lang="html">
<div class="outer">
<div class="outer">
سطر 112: سطر 112:


==انظر أيضًا==
==انظر أيضًا==
*  [[CSS/Attribute_Selectors|مُحدّدات الخاصيّات]]
*  [[CSS/Attribute_Selectors|مُحدّدات الخاصيّات]].
* <code>[[JavaScript/Document/querySelector|Document.querySelector()‎]]</code>
* <code>[[JavaScript/Document/querySelector|Document.querySelector()‎]]</code>
* <code>[[JavaScript/Element/querySelectorAll|Element.querySelectorAll()‎]]</code>
* <code>[[JavaScript/Element/querySelectorAll|Element.querySelectorAll()‎]]</code>
سطر 120: سطر 120:


==مصادر ومواصفات==
==مصادر ومواصفات==
* مواصفة [https://dom.spec.whatwg.org/#dom-parentnode-queryselectorall DOM]
* مواصفة [https://dom.spec.whatwg.org/#dom-parentnode-queryselectorall DOM].
* مواصفة [https://dev.w3.org/2006/webapi/selectors-api2/#dom-parentnode-queryselectorall Selectors API Level 2]
* مواصفة [https://dev.w3.org/2006/webapi/selectors-api2/#dom-parentnode-queryselectorall Selectors API Level 2].
* مواصفة [https://www.w3.org/TR/dom/#dom-parentnode-queryselectorall DOM4]
* مواصفة [https://www.w3.org/TR/dom/#dom-parentnode-queryselectorall DOM4].
* مواصفة [https://www.w3.org/TR/selectors-api/#interface-definitions Selectors API Level 1]
* مواصفة [https://www.w3.org/TR/selectors-api/#interface-definitions Selectors API Level 1].


  [[تصنيف:JavaScript]]
  [[تصنيف:JavaScript]]

مراجعة 11:02، 31 مارس 2018

يُعيد التّابع Document.querySelectorAll()‎ كائنًا ثابتًا (غير حيّ) من النّوع NodeList الذي يُمثّل قائمة عناصر المستند التي تُوافق المُحدّدات المعطاة.

مُلاحظة: هذا التّابع مبني على التّابع ParentNode.querySelectorAll()‎.

البنية العامة

elementList = parentNode.querySelectorAll(selectors);

selectors‎

سلسلة نصيّة من النّوع DOMString تحتوي على مُحدّد واحدٍ أو أكثر لمُوافقته مع عناصر المستند والبحث عن العنصر المرغوب. يجب على هذه السّلسلة النّصيّة أن تكون مُحدّد CSS صالح، إن لم يكن كذلك، فسيُرمى استثناء SyntaxError، انظر هذه الصّفحة للمزيد حول المُحدّدات وكيفيّة إدارتها. يُمكن تحديد عدّة محدّدات عبر فصلها بفاصلة (,).

مُلاحظة: يجب تهريب (escaping) المحارف التي ليست جزءًا من بنية CSS العامّة باستعمال محرف \. ولأنّ JavaScript تستعمل كذلك المحرف \ لتهريب المحارف، فيجب كتابة السلاسل النّصيّة الحرفيّة بعنايةٍ خاصّةٍ عند استعمال هذه المحارف. انظر فقرة تهريب المحارف الخاصّة في هذه الصّفحة.

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

كائنٌ غير حيّ من النّوع NodeList يحتوي كائنًا واحدًا من النّوع Element لكلّ عنصرٍ يوافق واحدًا على الأقل من المُحدّدات المُعطاة.

مُلاحظة: إن كانت المحدّدات selectors تشمل عنصر CSS زائف، فالقائمة المُعادة ستكون دائمًا فارغة.

الاستثناءات

SyntaxError‎

يُرمى في حالة كانت بنية المُحدّدات selectors‎ خطأ.

أمثلة

الحصول على قائمة عناصر موافقة

للحصول على كائن NodeList لجميع عناصر <p>‎‎ في المستند:

var matches = document.querySelectorAll("p");

يُعيد المثال التّالي قائمة بجميع عناصر <div> داخل المستند ذات الصّنف "note" أو ذات الصّنف "alert":

var matches = document.querySelectorAll("div.note, div.alert");

هنا نحصل على قائمة العناصر ‎<p>‎‎ أولاد العنصر<div> المباشرين ذو الصّنف "highlighted"، والموجودة داخل عنصرٍ حاوٍ (container) مُعرّفه "test":

var container = document.querySelector("#test");
var matches = container.querySelectorAll("div.highlighted > p");

يستعمل المثال التّالي مُحدّد خاصيّات لإعادة قائمةٍ بعناصر iframe التي تحتوي خاصيّة تُسمّى "data-src" في المستند:

var matches = document.querySelectorAll("iframe[data-src]");

أمّا في هذا المثال، نستعمل مُحدّد الخاصيّات لإعادة قائمةٍ بعناصر القوائم <li> الموجودة داخل قائمةٍ ذات المُعرّف "userlist" ذات خاصيّة باسم "data-active" بقيمة "1" .

var container = document.querySelector("#userlist");
var matches = container.querySelectorAll("li[data-active=1]");

الوصول إلى العناصر الموافقة

بعد أن يُعاد الكائن NodeList الذي يحمل العناصر الموافقة، ستتمكّن من التّعامل معها كما تتعامل مع أية مصفوفة. إن كانت المصفوفة خاوية (أي أنّ الخاصيّة length تُساوي 0)، فهذا يعني بأنّه لم يوجد أي عنصر. إن لم يكن الأمر كذلك، فتستطيع الوصول إلى محتويات القائمة كما تصل إلى محتويات المصفوفة. ويمكنك استعمال أية حلقة تكرار معروفة، مثل:

var highlightedItems = userList.querySelectorAll(".highlighted");

highlightedItems.forEach(function(userItem) {
  deleteUser(userItem);
});

ملاحظات

يعمل التّابع querySelectorAll‎()‎ بشكلٍ مختلف عن معظم مكتبات JavaScript التي تُستعمل للتّعامل مع DOM، ما قد يؤدّي إلى نتائج غير متوقّعة.

لنضع كمثال مستند HTML ذو ثلاثة عناصر <div> متداخلة هكذا:

<div class="outer">
  <div class="select">
    <div class="inner">
    </div>
  </div>
</div>

في جزء JavaScript نضع:

var select = document.querySelector('.select');
var inner = select.querySelectorAll('.outer .inner');
inner.length; // هنا، القيمة هي واحد وليست صفرا

في المثال أعلاه، عند تحديد "‎.‎outer ‎.‎inner" في سياق <div> ذو الصنف "select"، فالعنصر ذو الصنف "‎.‎inner" يوجد رغم أنّ "‎.‎outer" ليس من أولاد العنصر الرّئيسيّ الذي أُجرِيَ عليه البحث ( أي "‎.‎select"). افتراضيًّا يتحقّق التّابع querySelectorAll‎()‎ فقط ممّا إذا كان آخر عنصر من المُحدّد موجودًا داخل نطاق البحث.

يسترجع الصنف الزّائف ‎:‎scope التّصرّف المُتوقّع، إذ لا يوافق سوى المحدّدات على أولاد العنصر الرّئيسيّ:

var select = document.querySelector('.select');
var inner = select.querySelectorAll(':scope .outer .inner');
inner.length; // 0

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي 1 3.5 8 10 3.2
الصنف الزّائف ‎:‎scope نعم 32 لا 15 7

انظر أيضًا

مصادر ومواصفات