"হাইরচারওয়াইটিউএইউকিউএসইএআরআর: ডম ব্যতিক্রম 3" -ইরর ঠিক কী কারণ হতে পারে?


184

কীভাবে এটি jQuery এর সাথে সম্পর্কিত? আমি জানি যে গ্রন্থাগারটি অভ্যন্তরীণভাবে জাভাস্ক্রিপ্টের ফাংশন ব্যবহার করে, তবে যখনই এ জাতীয় সমস্যা দেখা দেয় তখন এটি ঠিক কী করার চেষ্টা করে?

উত্তর:


227

এর অর্থ হল আপনি DOM গাছের এমন কোনও জায়গায় একটি ডোম নোড toোকানোর চেষ্টা করেছেন যেখানে এটি যেতে পারে না। আমি এটি দেখতে দেখা সবচেয়ে সাধারণ জায়গাটি সাফারিতে যা নিম্নলিখিতগুলির অনুমতি দেয় না:

document.appendChild(document.createElement('div'));

সাধারণত এটি কেবল একটি ভুল যেখানে এটির উদ্দেশ্য ছিল:

document.body.appendChild(document.createElement('div'));

বন্য দেখা অন্যান্য কারণ (মন্তব্য থেকে সংক্ষিপ্তিত):

  • আপনি নিজেই একটি নোড যুক্ত করার চেষ্টা করছেন
  • আপনি নোডে নাল যুক্ত করার চেষ্টা করছেন
  • আপনি একটি পাঠ্য নোডে নোড যুক্ত করার চেষ্টা করছেন।
  • আপনার এইচটিএমএল অবৈধ (যেমন আপনার টার্গেট নোড বন্ধ করতে ব্যর্থ)
  • ব্রাউজারটি মনে করে যে আপনি এইচটিএমএল যুক্ত করার চেষ্টা করছেন তা হ'ল এক্সএমএল ( <!doctype html>আপনার ইনজেকশনের এইচটিএমএল যুক্ত করে বা এক্সএইচআর মাধ্যমে আনার সময় সামগ্রীর ধরণ নির্দিষ্ট করে)

49
ত্রুটিটি তখন ঘটে যখন আপনি চেষ্টা করে নিজেই কোনও নোড যুক্ত করেন। আমি কেবল এটির মধ্যে দৌড়েছি :-)
বেন ক্লেটন

5
আমি কেবলমাত্র এই উপাদানটির সাথে একটি নাল যুক্ত করার চেষ্টা করেছি (এবং সম্পূর্ণ সম্পর্কহীন টিপ - সর্বদা নিশ্চিত করুন যে আপনার ফাংশনগুলি আপনি
যেভাবে

আমি এটি দেখেছিলাম যখন একটি ক্লোজিং ট্যাগ লক্ষ্য থেকে অনুপস্থিত ছিল।
টম এইচ

আইজে (9) এজেএক্স ফলাফল যুক্ত করতে jQuery ব্যবহার করার সময় এই ত্রুটিটি ফেলে দিতে পারে। response.xmlযেখানে উপলব্ধ তা ব্যবহার করে এড়িয়ে চলুন । উদাহরণস্বরূপ,$(e).append(response.xml || $(response));
কোর্টনি ক্রিস্টেনসেন

আমি যখন jQuery (ডেস্কটপ) থেকে অ্যান্ড্রয়েডের জেপ্টো তে পরিবর্তন করেছি তখন এটি পেয়েছি। পিছনে ফিরে।
রবীন্দ্রনাথ আকিলা

5

আপনি যদি কোনও জিকিউরি আজাক্স কল aj .জ্যাক্সের কারণে এই ত্রুটিটি পেয়ে থাকেন

তারপরে আপনাকে সার্ভার থেকে ডেটা টাইপ কী ফিরে আসবে তা নির্দিষ্ট করতে হবে । আমি এই সাধারণ সম্পত্তিটি ব্যবহার করে প্রতিক্রিয়াটিকে অনেক স্থির করেছি।

$.ajax({
    url: "URL_HERE",
    dataType: "html",
    success: function(response) {
        $('#ELEMENT').html(response);
    }
});

1
ওয়েব / phonegap জন্য একক কোড বেস, পরিবর্তনশীল এ koorchik দ্বারা উত্তর ব্যবহার টেমপ্লেট লোড করার রি-ফ্যাক্টর stackoverflow.com/questions/8366733/... । ডেস্কটপ ব্রাউজারে কাজ করেছেন, মোবাইল ব্রাউজারে বা নেটিভ অ্যাপে কাজ করেননি। এই সমাধানটি কৌশলটি করেছে।
কিনজল দীক্ষিত

এখানে একই সমস্যা, অদ্ভুতভাবে কেবল আইওএসে data. নির্দিষ্ট করে ডেটা টাইপ কাজ করেছে। ধন্যবাদ
হোমারজাম

3

বিশেষত jQuery এর সাহায্যে আপনি উপাদান তৈরি করার সময় এইচটিএমএল ট্যাগের চারপাশে যত্নশীলদের ভুলে গেলে আপনি এই সমস্যাটিতে চলে যেতে পারেন:

 $("#target").append($("div").text("Test"));

এই ত্রুটিটি উত্থাপন করবে কারণ আপনি যা বোঝাতে চেয়েছিলেন তা ছিল

 $("#target").append($("<div>").text("Test"));

3

এই ত্রুটিটি ঘটতে পারে যখন আপনি ডিওমে কোনও নোড invalidোকানোর চেষ্টা করেন যা অবৈধ এইচটিএমএল, যা কোনও ভুল বৈশিষ্ট্যের মতো সূক্ষ্ম কিছু হতে পারে, উদাহরণস্বরূপ:

// <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

2

@ কেলি নরটন তার উত্তরে ঠিক The browser thinks the HTML you are attempting to append is XMLবলেছেন যে এটি এবং পরামর্শ দেয় specifying the content type when fetching via XHR

এটি সত্য তবে আপনি কখনও কখনও তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করেন যা আপনি সংশোধন করতে যাচ্ছেন না। এটি আমার ক্ষেত্রে জিকুয়েরি ইউআই। তারপরে আপনার Content-Typeজাভাস্ক্রিপ্টের দিকে প্রতিক্রিয়া টাইপকে ওভাররাইড না করে প্রতিক্রিয়াতে ডান সরবরাহ করা উচিত । আপনার সেট Content-Typeকরা text/htmlএবং ভাল আছেন।

আমার ক্ষেত্রে, এটা ছিল সহজ পুনঃনামকরনের যেমন file.xhtmlকরতে file.html- অ্যাপ্লিকেশন সার্ভার বাক্সের বাইরে MIME প্রকারসমূহ ম্যাপিং কিছু এক্সটেনশন ছিল। যখন বিষয়বস্তু গতিশীল হয়, আপনি কোনওভাবে সামগ্রী প্রতিক্রিয়া সেট করতে পারেন (যেমন res.setContentType("text/html")সার্লেট এপিআইতে)।


1

আপনি এই প্রশ্নগুলি দেখতে পারেন

পুনরাবৃত্তভাবে একটি নেস্টেড তালিকা উত্পন্ন করার জন্য জাভাস্ক্রিপ্ট ব্যবহার করার সময় HIERARCHY_REQUEST_ERR পাচ্ছেন

অথবা

এএসপি.নেট বোতাম পোস্টব্যাকের সাথে jQuery ইউআই ডায়ালগ

উপসংহারটি হল

আপনি যখন ফাংশন সংযোজন ব্যবহার করার চেষ্টা করবেন তখন আপনার এই উদাহরণটির মতো নতুন ভেরিয়েবল ব্যবহার করা উচিত

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" আবার বের হবে না।


1

গুগল ক্রোম এক্সটেনশন সাইডউইকি ব্যবহার করার সময় আমি এই ত্রুটির মুখোমুখি হয়েছি। এটি অক্ষম করা আমার জন্য সমস্যাটি সমাধান করেছে।


1

আমি এখানে আরও একটি নির্দিষ্ট উত্তর যুক্ত করতে যাচ্ছি কারণ এটি উত্তরের জন্য ২ ঘন্টা অনুসন্ধান ছিল ...

আমি একটি নথিতে একটি ট্যাগ ইনজেকশনের চেষ্টা করছিলাম। এইচটিএমএল এর মত ছিল:

<map id='imageMap' name='imageMap'>
  <area shape='circle' coords='55,28,5' href='#' title='1687.01 - 0 percentile' />
</map>

আপনি যদি লক্ষ্য করেন, ট্যাগটি পূর্ববর্তী উদাহরণে বন্ধ রয়েছে ( <area/>)। এটি ক্রোম ব্রাউজারগুলিতে গৃহীত হয়নি। ডাব্লু 3 স্কুলগুলি মনে হয় এটি বন্ধ করা উচিত, এবং আমি এই ট্যাগটিতে অফিসিয়াল স্পেসটি খুঁজে পাইনি, তবে এটি নিশ্চিত যে এটি ক্রোমে কাজ করে না। ফায়ারফক্স তা গ্রহণ করা হবে না সঙ্গে <area/>বা <area></area>বা <area>। ক্রোম অবশ্যই থাকা উচিত <area>। আইই কিছু গ্রহণ করে।

যাইহোক, এই ত্রুটিটি কারণ এটি আপনার এইচটিএমএল সঠিক নয় can


1

আমি জানি যে এই থ্রেডটি পুরানো, তবে আমি সমস্যার আরও একটি কারণের মুখোমুখি হয়েছি যা অন্যরা সহায়ক হতে পারে। গুগল অ্যানালিটিক্স নিজেকে এইচটিএমএল মন্তব্যে যুক্ত করার চেষ্টা করে ত্রুটি পাচ্ছিলাম। আপত্তিজনক কোড:

document.documentElement.firstChild.appendChild(ga);

এটি ত্রুটি সৃষ্টি করছিল কারণ আমার প্রথম উপাদানটি একটি এইচটিএমএল মন্তব্য ছিল (যথা একটি ড্রিমউইভার টেম্পলেট কোড)।

<!-- #BeginTemplate "/Templates/default.dwt.php" -->

আমি আপত্তিজনক কোডটি এমন কিছুতে সংশোধন করেছি যা বুলেটপ্রুফ হিসাবে স্বীকৃত নয়, তবে আরও ভাল:

document.documentElement.firstChild.nodeType===1 ? document.documentElement.firstChild.appendChild(ga) : document.documentElement.lastChild.appendChild(ga);

1

ইন্টারনেট এক্সপ্লোরারের কোনও অন্য উইন্ডোতে নোড যুক্ত করার চেষ্টা করার সময় আপনি যদি এই সমস্যায় পড়ে থাকেন তবে নোডের পরিবর্তে নোডের অভ্যন্তরে এইচটিএমএল ব্যবহারের চেষ্টা করুন।

myElement.appendChild(myNode.html());

আইই অন্য উইন্ডোতে নোড যুক্ত করতে সমর্থন করে না।


আপনি কি আসলে এটি চেষ্টা করেছিলেন? এমনকি ক্রোমেও আমি টাইপ এরির পাচ্ছি: 'নোড'-এ' অ্যাপেন্ডচিল্ড 'চালানোতে ব্যর্থ: প্যারামিটার 1' নোড 'টাইপের নয় ((…)। Thats কারণ .html () টাইপ স্ট্রিং এবং অ্যাপেন্ডচিল্ড টাইপ নোডের প্রত্যাশা করে।
13:25

1

আইইউ-তে আমার এই ত্রুটিটি ঘটেছিল যখন আমি উইন্ডো এ-র একটি ইতিমধ্যে বিদ্যমান একটিতে গতিশীলভাবে অ্যাপিলচিল্ড করার চেষ্টা করেছি এ উইন্ডো এ একটি শিশু উইন্ডো বি তৈরি করবে বি উইন্ডো বিতে কিছু ব্যবহারকারীর ক্রিয়া করার পরে একটি ফাংশন চলবে এবং একটি অ্যাপেন্ডচিল্ড করবে উইন্ডো এ ব্যবহার করে ফর্ম উপাদান window.opener.document.getElementById('formElement').appendChild(input);

এটি একটি ত্রুটি নিক্ষেপ করবে। document.createElement('input');চাইল্ড উইন্ডোতে ইনপুট উপাদান তৈরি করে , এটিকে window.openerউইন্ডো A তে প্যারামিটার হিসাবে পাস করার সাথে সাথে সেখানে সংযোজন রয়েছে with আমি যদি একই উইন্ডোতে ইনপুট উপাদানটি তৈরি করেছিলাম যেখানে এটি যুক্ত করতে যাচ্ছিলাম তবে এটি ত্রুটি ছাড়াই সফল হবে।

সুতরাং আমার উপসংহার (দয়া করে যাচাই করুন): document.createElementএকটি উইন্ডোতে কোনও উপাদান গতিশীলভাবে তৈরি (ব্যবহার করে ) তৈরি করা যাবে না এবং তারপরে .appendChildঅন্য উইন্ডোতে থাকা কোনও উপাদানকে (ব্যবহার করে ) যুক্ত করা যাবে ( সম্ভবত কোনও অতিরিক্ত অতিরিক্ত পদক্ষেপ না নিয়েই এটি XML হিসাবে বিবেচনা না করে তা নিশ্চিত করতে আমি মিস করেছি) অথবা অন্যকিছু). এটি আই 9 এ ব্যর্থ হয় এবং ত্রুটি ছুড়ে দেয়, এফএফ-তে এটি যদিও ঠিক কাজ করে।

পুনশ্চ. আমি jQuery ব্যবহার করি না।


আপনার পয়েন্টারকে ধন্যবাদ, আমি এটার চারপাশে একটি উপায় বের করেছি। আপনি আগ্রহী আগ্রহী হলে আমি পোস্ট করা উত্তর দেখুন।
টি.হো

0

এর আরেকটি কারণ সামনে আসতে পারে তা হল যে উপাদানটি প্রস্তুত হওয়ার আগে আপনি সংযোজন করছেন

<body>

<script>
document.body.appendChild(foo);
</script>

</body>
</html>

এই ক্ষেত্রে, আপনাকে স্ক্রিপ্টটি পরে সরিয়ে নিতে হবে। এটি কোশার কিনা তা পুরোপুরি নিশ্চিত নয়, তবে শরীরের পরে স্ক্রিপ্টটি সরিয়ে নেওয়া সাহায্য করবে বলে মনে হচ্ছে না: /

স্ক্রিপ্টটি সরানোর পরিবর্তে, আপনি ইভেন্ট হ্যান্ডলারে অ্যাডিংও করতে পারেন।


0

আমি সেই ত্রুটিটি পেয়েছি কারণ আমি আমার উপাদানটি ক্লোন করতে ভুলে গেছি।

// creates an error
clone = $("#thing");
clone.appendTo("#somediv");

// does not
clone = $("#thing").clone();
clone.appendTo("#somediv");

0

শুধু রেফারেন্সের জন্য।

আইই উপাদানটি যুক্ত করা হচ্ছে এমন উইন্ডো প্রসঙ্গ থেকে আলাদা উইন্ডো প্রসঙ্গে তৈরি হওয়া যে কোনও উপাদানকে যুক্ত করা অবরুদ্ধ করবে।

যেমন

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 দিয়ে একটি ডোম উপাদান তৈরি করতে পারি তা বুঝতে পারি না।


0

আইপি 9-এ আমি এই ত্রুটিটি পেয়েছি যদি আমি স্ক্রিপ্ট ডিবাগিং (ইন্টারনেট এক্সপ্লোরার) বিকল্পটি অক্ষম করে থাকি। আমি যদি স্ক্রিপ্ট ডিবাগ সক্ষম করি তবে ত্রুটিটি দেখতে পাচ্ছি না এবং পৃষ্ঠাটি ভাল কাজ করে। এটি ডিওগ-এর ব্যতিক্রম সক্রিয় বা অক্ষম দ্বারা ডিবাগিংয়ের সাথে কী করেছে তা অদ্ভুত বলে মনে হচ্ছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.