ترتيب DOM NodeList الذي تم إرجاعه بواسطة getChildNodes()

StackOverflow https://stackoverflow.com/questions/66032

  •  09-06-2019
  •  | 
  •  

سؤال

طريقة دوم getChildNodes() يعود أ NodeList من أبناء الحالي Node.بينما أ NodeList تم ترتيبها، هل القائمة مضمونة أن تكون في ترتيب المستندات؟

على سبيل المثال، نظرا <a><b/><c/><d/></a> يكون a.getChildNodes() مضمونة للعودة أ NodeList مع b, c و d بهذا الترتيب?

ال javadoc ليس واضحا في هذا الشأن.

هل كانت مفيدة؟

المحلول

في تجربتي، نعم.ال مواصفات DOM ليس أكثر وضوحا.إذا كنت مصابًا بجنون العظمة، فجرّب شيئًا مثل

current = node.firstChild;
while(null != current) {
    ...
    current = current.nextSibling;
}

نصائح أخرى

قائمة العقد المرتبة بالمستندات هي السلوك في تطبيقات DOM الأخرى، مثل Javascript أو Python.وستكون قائمة العقد المرتبة عشوائيًا عديمة الفائدة تمامًا.أعتقد أنه من الآمن الاعتماد على العقد التي يتم إرجاعها بترتيب المستندات.

تجربتي هي أنه في كل مرة كنت أهتم فيها بالنظر، كان الأمر في ترتيب المستندات.ومع ذلك، أعتقد أنني قرأت في مكان ما أنه ليس من المضمون أن يكون في ترتيب المستندات.لا أستطيع العثور على المكان الذي قرأت فيه ذلك الآن، لذا اعتبره إشاعة.أعتقد أن أفضل رهان لك إذا كنت يجب سيكون الحصول عليها بترتيب المستند هو استخدام FirstChild ثم NextSibling حتى لا يكون هناك المزيد من الأشقاء.

أود أن أخبرك أن هذا مضمون (كما أعتقد) ولكن مواصفات نموذج كائن المستند في حد ذاته يبدو غامضا في هذه الحالة.أنا متأكد تمامًا من أن الأمر دائمًا يتعلق بترتيب المستندات.

في المثال الخاص بك، كما قدمت.أنا أعتقد هذا.ومع ذلك، لقد واجهت تجارب في العالم الحقيقي حيث تم تفسير المساحات على أنها عقد، لذلك:


<a><b/><c/><d/></a>

يختلف عن


<a><b/> <c/><d/></a>

إذا كنت تنظر إلى الفهرس [1]، فقد يقدم Firefox وIE نتائج مختلفة.أنصح بعدم الاعتماد على الطلب حسب حاجتك.

نعم، لقد تم ترتيبها لأنها تُرجع قائمة عقدة، يجب عليك أن تقول getNamedChildNodes للحصول على قائمة غير مرتبة كما في NamedNodeList.

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