वास्तव में यह jQuery से कैसे संबंधित है? मुझे पता है कि पुस्तकालय आंतरिक रूप से देशी जावास्क्रिप्ट फ़ंक्शंस का उपयोग करता है, लेकिन जब भी इस तरह की समस्या दिखाई देती है तो वह वास्तव में क्या करने की कोशिश कर रहा है?
वास्तव में यह jQuery से कैसे संबंधित है? मुझे पता है कि पुस्तकालय आंतरिक रूप से देशी जावास्क्रिप्ट फ़ंक्शंस का उपयोग करता है, लेकिन जब भी इस तरह की समस्या दिखाई देती है तो वह वास्तव में क्या करने की कोशिश कर रहा है?
जवाबों:
इसका मतलब है कि आपने DOM ट्री में एक डोम नोड को एक जगह डालने की कोशिश की है जहाँ वह नहीं जा सकता। सबसे आम जगह जो मैं देख रहा हूं वह सफारी पर है जो निम्नलिखित की अनुमति नहीं देता है:
document.appendChild(document.createElement('div'));
आम तौर पर, यह सिर्फ एक गलती है जहां यह वास्तव में इरादा था:
document.body.appendChild(document.createElement('div'));
जंगली में देखे गए अन्य कारण (टिप्पणियों से संक्षेप में):
<!doctype html>अपने इंजेक्ट किए गए HTML में जोड़कर ठीक करें, या XHR के माध्यम से लाते समय सामग्री प्रकार निर्दिष्ट करें)response.xmlजहां उपलब्ध हो, उसका उपयोग करने से बचें । उदाहरण के लिए,$(e).append(response.xml || $(response));
यदि आपको यह त्रुटि jquery ajax $ $ .ajax के कारण मिल रही है
फिर आपको यह निर्दिष्ट करने की आवश्यकता हो सकती है कि सर्वर से डेटाटाइप वापस आ रहा है। मैंने इस साधारण संपत्ति का उपयोग करके प्रतिक्रिया को बहुत अधिक निर्धारित किया है।
$.ajax({
url: "URL_HERE",
dataType: "html",
success: function(response) {
$('#ELEMENT').html(response);
}
});
यह त्रुटि तब हो सकती है जब आप DOM में एक नोड सम्मिलित करने का प्रयास करते हैं जो अमान्य HTML है, जो कि एक गलत विशेषता के रूप में सूक्ष्म रूप में कुछ हो सकता है, उदाहरण के लिए:
// <input> can have a 'type' attribute
var $input = $('<input/>').attr('type', 'text');
$holder.append($input); // OK
// <div> CANNOT have a 'type' attribute
var $div = $('<div></div>').attr('type', 'text');
$holder.append($div); // Error: HIERARCHY_REQUEST_ERR: DOM Exception 3
@ केली नॉर्टन अपने जवाब में सही है कि The browser thinks the HTML you are attempting to append is XMLऔर सुझाव देता है specifying the content type when fetching via XHR।
हालांकि यह सच है कि आप कभी-कभी तीसरे पक्ष के पुस्तकालयों का उपयोग करते हैं जिन्हें आप संशोधित नहीं करने जा रहे हैं। यह मेरे मामले में JQuery UI है। फिर आपको Content-Typeजावास्क्रिप्ट पक्ष पर प्रतिक्रिया प्रकार को ओवरराइड करने के बजाय प्रतिक्रिया में अधिकार प्रदान करना चाहिए । अपने Content-Typeको सेट करें text/htmlऔर आप ठीक हैं।
मेरे मामले में, यह था के रूप में आसान का नाम बदलने के रूप में file.xhtmlकरने के लिए file.html- आवेदन सर्वर बॉक्स से बाहर MIME प्रकार मैपिंग करने के लिए कुछ विस्तार किया था। जब सामग्री गतिशील होती है, तो आप किसी भी तरह से सामग्री की प्रतिक्रिया सेट कर सकते हैं (उदाहरण res.setContentType("text/html")के लिए सर्वलेट एपीआई)।
आप इन सवालों को देख सकते हैं
या
j.NET UI डायलॉग ASP.NET बटन पोस्टबैक के साथ
निष्कर्ष है
जब आप फ़ंक्शन परिशिष्ट का उपयोग करने का प्रयास करते हैं, तो आपको इस उदाहरण की तरह, नए चर का उपयोग करना चाहिए
jQuery(function() {
var dlg = jQuery("#dialog").dialog({
draggable: true,
resizable: true,
show: 'Transfer',
hide: 'Transfer',
width: 320,
autoOpen: false,
minHeight: 10,
minwidth: 10
});
dlg.parent().appendTo(jQuery("form:first"));
});
ऊपर के उदाहरण में, फ़ंक्शन एपेंडो को चलाने के लिए var "dlg" का उपयोग करता है। फिर त्रुटि "HIERARCHY_REQUEST_ERR" फिर से नहीं निकलेगी।
Google Chrome एक्सटेंशन Sidewiki का उपयोग करते समय मुझे इस त्रुटि का सामना करना पड़ा। इसे अक्षम करने से मेरे लिए समस्या हल हो गई।
मैं यहां एक और विशिष्ट उत्तर जोड़ने जा रहा हूं क्योंकि यह उत्तर के लिए 2 घंटे की खोज थी ...
मैं एक दस्तावेज़ में एक टैग इंजेक्ट करने की कोशिश कर रहा था। Html ऐसा था:
<map id='imageMap' name='imageMap'>
<area shape='circle' coords='55,28,5' href='#' title='1687.01 - 0 percentile' />
</map>
यदि आप ध्यान दें, तो टैग पूर्ववर्ती उदाहरण ( <area/>) में बंद है । इसे क्रोम ब्राउज़र में स्वीकार नहीं किया गया था। w3schools को लगता है कि इसे बंद कर दिया जाना चाहिए, और मुझे इस टैग पर आधिकारिक युक्ति नहीं मिली, लेकिन यह सुनिश्चित है कि क्रोम में काम नहीं करता। फ़ायरफ़ॉक्स इसे <area/>या <area></area>या के साथ स्वीकार नहीं करेगा<area> । क्रोम होना चाहिए <area>। IE कुछ भी स्वीकार करता है।
वैसे भी, यह त्रुटि हो सकती है क्योंकि आपका HTML सही नहीं है।
मुझे पता है कि यह धागा पुराना है, लेकिन मुझे इस समस्या का एक और कारण मिला है, जो दूसरों को मददगार लग सकता है। मुझे Google Analytics के साथ त्रुटि हो रही थी कि वह स्वयं को एक HTML टिप्पणी में जोड़ सके। अपमानजनक कोड:
document.documentElement.firstChild.appendChild(ga);
यह त्रुटि पैदा कर रहा था क्योंकि मेरा पहला तत्व एक HTML टिप्पणी थी (अर्थात् एक ड्रीमविवर टेम्पलेट कोड)।
<!-- #BeginTemplate "/Templates/default.dwt.php" -->
मैंने कुछ के लिए अपमानजनक कोड को संशोधित नहीं किया, जिसमें बुलेटप्रूफ नहीं है, लेकिन बेहतर है:
document.documentElement.firstChild.nodeType===1 ? document.documentElement.firstChild.appendChild(ga) : document.documentElement.lastChild.appendChild(ga);
यदि आप इंटरनेट एक्सप्लोरर में एक नोड को दूसरी विंडो में जोड़ने की कोशिश करते समय इस समस्या में भाग लेते हैं, तो नोड के बजाय नोड के अंदर HTML का उपयोग करने का प्रयास करें।
myElement.appendChild(myNode.html());
IE एक और विंडो में नोडिंग को जोड़ने का समर्थन नहीं करता है।
यह ERROR मेरे साथ IE9 में हुआ था, जब मैंने appendChild को गतिशील रूप से जोड़ने का प्रयास किया था जो पहले से ही एक विंडो में मौजूद था। A विंडो एक चाइल्ड विंडो बनायेगी B. विंडो में B कुछ यूजर एक्शन के बाद एक फंक्शन चलेगा और उस पर एक अपेंडिहिल करेगा। एलिमेंट का उपयोग विंडो ए में करें window.opener.document.getElementById('formElement').appendChild(input);
यह एक त्रुटि फेंक देगा। document.createElement('input');चाइल्ड विंडो का उपयोग करके इनपुट एलिमेंट बनाने के साथ ही , इसे पैरामीटर के रूप में पास करनाwindow.opener विंडो ए के , और वहां एपेंड किया जाता है। केवल अगर मैंने उसी विंडो में इनपुट एलिमेंट बनाया है, जहाँ मैं इसे जोड़ने जा रहा था, तो यह बिना त्रुटियों के सफल होगा।
इस प्रकार मेरा निष्कर्ष (कृपया सत्यापित करें): document.createElementएक खिड़की में कोई तत्व गतिशील रूप से (उपयोग करके ) नहीं बनाया जा सकता है , और फिर .appendChildकिसी अन्य विंडो में एक तत्व के लिए संलग्न (उपयोग ) किया जा सकता है (शायद एक विशेष अतिरिक्त कदम उठाए बिना मैं यह सुनिश्चित करने में चूक गया कि इसे XML नहीं माना जाता है या कुछ और)। यह IE9 में विफल रहता है और त्रुटि को फेंकता है, FF में यह ठीक काम करता है।
पुनश्च। मैं jQuery का उपयोग नहीं करते।
एक और कारण यह सामने आ सकता है कि आप तत्व तैयार होने से पहले संलग्न कर रहे हैं उदा
<body>
<script>
document.body.appendChild(foo);
</script>
</body>
</html>
इस स्थिति में, आपको स्क्रिप्ट को स्थानांतरित करने की आवश्यकता होगी। पूरी तरह से यकीन नहीं है कि अगर कोषेर है, लेकिन शरीर को मदद नहीं लगती है तो स्क्रिप्ट को आगे बढ़ाना: /
स्क्रिप्ट को स्थानांतरित करने के बजाय, आप एक इवेंट हैंडलर में भी एप्लाइड कर सकते हैं।
सिर्फ संदर्भ के लिए।
IE खिड़की के संदर्भ से एक अलग विंडो संदर्भ में बनाए गए किसी भी तत्व को जोड़ना बंद कर देगा, जो तत्व को जोड़ रहा है।
जैसे
var childWindow = window.open('somepage.html');
//will throw the exception in IE
childWindow.document.body.appendChild(document.createElement('div'));
//will not throw exception in IE
childWindow.document.body.appendChild(childWindow.document.createElement('div'));
मुझे अभी तक पता नहीं चला है कि एक अलग विंडो संदर्भ का उपयोग करके jQuery के साथ एक डोम तत्व कैसे बनाया जाए।
यदि IE स्क्रिप्ट स्क्रिप्ट डीबगिंग (Internet Explorer) अक्षम किया गया था तो मुझे यह त्रुटि मिलती है। यदि मैं स्क्रिप्ट डीबगिंग को सक्षम करता हूं तो मुझे त्रुटि दिखाई नहीं देती है और पृष्ठ ठीक काम करता है। यह अजीब लगता है कि डोम अपवाद को सक्षम या अक्षम डिबगिंग के साथ क्या करना है।