मैं जावास्क्रिप्ट पर अपेक्षाकृत नया हूं, और एक दिलचस्प व्यवहार पाया जिसे मैं आज समझा नहीं सकता। मेरे पास एक वेबसाइट पर एक कस्टम <hr>
(एक छवि के साथ) है, जो आईई 7 और नीचे में विचित्र रूप से प्रदर्शित होता है। इसे दूर करने के लिए, मैं का उपयोग getElementsByTag()
के साथ संयोजन में करना चाहता था। प्रारंभ में, मैं बस सूची पर पाश करने की कोशिश की है, तो:प्रतिस्थापन चाइल्ड() एक प्रकार के तत्व को दूसरे के साथ बदलते समय अजीब तरीके से व्यवहार क्यों करता है?
var hrules = document.getElementsByTagName('hr');
for (var i=0; i < hrules.length; i++) {
var newHrule = document.createElement("div");
newHrule.className = 'myHr';
hrules[i].parentNode.replaceChild(newHrule, hrules[i]);
document.write(i);
}
बहरहाल, यह काम नहीं करता है: यह वास्तव में केवल आधा तत्व हो जाता है, हर दूसरे एक लंघन। ।
var hrules = document.getElementsByTagName('hr');
var i = 0;
while (i < hrules.length) {
var newHrule = document.createElement("div");
newHrule.className = 'myHr';
hrules[i].parentNode.replaceChild(newHrule, hrules[i]);
document.write(i);
}
i
: मुद्रण i
दस्तावेज़ में <hr>
तत्वों की वास्तविक संख्या के आधे पूर्णांक मूल्यों देता है (उदाहरण के लिए अगर वहाँ 7 <hr/>
तत्व हैं, यह प्रिंट इसके विपरीत, निम्नलिखित काम करता है दस्तावेज में hrules के रूप में कई बार मुद्रित किया जाता है (लेकिन निश्चित रूप से हमेशा 0 है, क्योंकि मैं इसे बढ़ा नहीं रहा हूं), और hrules सही ढंग से बदल दिया गया है। मुझे लगता है कि while
यहां भी while(true)
हो सकता है - - यह तब तक चल रहा है जब तक यह <hr>
तत्वों से बाहर नहीं हो जाता है, लेकिन उसके बाद रुक जाता है (यह एन है ओटी प्रिंटिंग और 0 एस)।
मैंने कई अलग-अलग प्रकार के तत्वों के साथ यह कोशिश की है, और यह देखा है कि यह केवल तब होता है जब एक प्रकार तत्व के साथ दूसरे स्थान को बदलता है। अर्थात, और p
div
साथ, span
p
, आदि के साथ, div
div
साथ, की जगह अगर मैं p
साथ p
की जगह आदि मूल उदाहरण सही ढंग से काम करता है।
मुझे मिले दस्तावेज में कुछ भी नहीं (w3schools, विभिन्न Google खोज, यहां इत्यादि) एक स्पष्ट उत्तर सुझाता है।
यहां क्या हो रहा है? सबसे पहले, मैंने दूसरा उदाहरण क्यों पेश किया - replaceChild()
स्वचालित रूप से तत्वों पर फिर से चल रहा है? दूसरा, विभिन्न प्रकार के तत्वों के लिए व्यवहार अलग क्यों है?
तो अगर मैं आपको सही ढंग से समझ रहा हूं, तो 'hrules' की लंबाई गतिशील रूप से बदल रही है क्योंकि मैं 'replaceChild()' कहता हूं, क्योंकि मैं उन्हें सूची के तत्वों को एक अलग प्रकार के तत्व में बदलकर हटा रहा हूं? यह थोड़ा आश्चर्यजनक है, हालांकि आवश्यक रूप से सहज नहीं है। यह दूसरे भाग को भी समझाता है, मुझे लगता है। –
@ क्रिस, क्या आपने समस्या को हल करने का अंत किया? मुझे बिल्कुल वही समस्या मिली है। – Pav
@Pav - समाधान के लिए नीचे देखें मैं समाप्त हुआ: –