Esattamente come si relaziona a jQuery? So che la libreria utilizza funzioni JavaScript native internamente, ma che cosa è esattamente che cercando di fare ogni volta che appare un tale problema?Che cosa può causare un "HIERARCHY_REQUEST_ERR: DOM Exception 3" -Errore?
risposta
Significa che hai provato ad inserire un nodo DOM in un posto nell'albero DOM dove non può andare. Il luogo più comune che vedo questo è su Safari che non consente il seguente:
document.appendChild(document.createElement('div'));
In generale, questo è solo un errore in cui questo è stato effettivamente destinato:
document.body.appendChild(document.createElement('div'));
Altre cause visti nel selvatico (sintetizzato dai commenti):
- Si sta tentando di aggiungere un nodo a sé
- Si sta tentando di aggiungere nulla ad un nodo
- si sta tentando di aggiungere un nodo a un nodo di testo.
- tuo HTML è valido (ad esempio, non riuscendo a chiudere il nodo di destinazione)
- Il browser pensa che il codice HTML che si sta tentando di aggiungere è XML (fix con l'aggiunta di
<!doctype html>
per il codice HTML iniettato, o specificando il tipo di contenuto durante il recupero tramite XHR)
potete vedere queste domande
Getting HIERARCHY_REQUEST_ERR when using Javascript to recursively generate a nested list
o
jQuery UI Dialog with ASP.NET button postback
La conclusione è
quando si tenta di utilizzare la funzione di aggiunta, è necessario utilizzare nuova variabile, come in questo esempio
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"));
});
Nell'esempio precedente, utilizza il var "dlg" per eseguire la funzione appendTo. Poi errore “HIERARCHY_REQUEST_ERR" non uscire di nuovo.
ho incontrato questo errore quando si utilizza l'estensione di Google Chrome Sidewiki. La disattivazione è risolto il problema per me.
ho intenzione di aggiungere una risposta più specifica qui perché era una ricerca 2 ore per la risposta ...
stavo cercando di iniettare un tag in un documento il formato HTML è stato in questo modo:.
<map id='imageMap' name='imageMap'>
<area shape='circle' coords='55,28,5' href='#' title='1687.01 - 0 percentile' />
</map>
Se si nota, il tag è chiuso nel precedente esempio (<area/>
). Questo non è stato accettato nei browser Chrome. w3schools sembra pensare che dovrebbe essere chiuso e non sono riuscito a trovare le specifiche ufficiali su questo tag, ma sicuramente non funziona in Chrome. Firefox non lo accetterà con <area/>
o <area></area>
o <area>
. Chrome deve avere <area>
. IE accetta qualsiasi cosa.
In ogni caso, questo errore può essere dovuto al fatto che il codice HTML non è corretto.
In particolare con jQuery si può incorrere in questo problema se dimenticare i segni di omissione di tutto il tag HTML per la creazione di elementi:
$("#target").append($("div").text("Test"));
solleverà questo errore perché quello che volevi dire era
$("#target").append($("<div>").text("Test"));
grazie mille per questo. – bcolin
Carote? O carette? –
I ho ricevuto quell'errore perché ho dimenticato di clonare il mio elemento.
// creates an error
clone = $("#thing");
clone.appendTo("#somediv");
// does not
clone = $("#thing").clone();
clone.appendTo("#somediv");
Questo errore può verificarsi quando si tenta di inserire un nodo nel DOM, che è valido HTML, che può essere qualcosa di sottile, come un attributo non corretto, ad esempio:
// <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
Se sei questo errore a causa di una chiamata jquery ajax $ .ajax
allora potrebbe essere necessario specificare che cosa l'dataType sta tornando dal server. Ho risolto la risposta molto usando questa semplice proprietà.
$.ajax({
url: "URL_HERE",
dataType: "html",
success: function(response) {
$('#ELEMENT').html(response);
}
});
base di codice singolo per Web/PhoneGap, refactored per caricare dinamicamente il modello utilizzando la risposta di koorchik all'indirizzo http://stackoverflow.com/questions/8366733/external-template-in-underscore. ha funzionato nel browser desktop, non ha funzionato nel browser mobile o nell'app nativa. questa soluzione ha funzionato. –
Lo stesso problema qui, stranamente solo in iOS 5. Specifica dataType ha funzionato. Grazie – homerjam
So che questo thread è vecchio, ma ho riscontrato un'altra causa del problema che altri potrebbero trovare utili. Stavo ricevendo l'errore con Google Analytics che cercava di aggiungersi a un commento HTML. Il codice incriminato:
document.documentElement.firstChild.appendChild(ga);
Questo stava causando l'errore perché il mio primo elemento è un commento HTML (vale a dire un codice di modello di Dreamweaver).
<!-- #BeginTemplate "/Templates/default.dwt.php" -->
ho modificato il codice incriminato per qualcosa certamente non a prova di proiettile, ma meglio:
document.documentElement.firstChild.nodeType===1 ? document.documentElement.firstChild.appendChild(ga) : document.documentElement.lastChild.appendChild(ga);
Un altro motivo per questo può venire è che si si desidera aggiungere i prima che l'elemento è pronto per esempio
<body>
<script>
document.body.appendChild(foo);
</script>
</body>
</html>
In questo caso, è necessario spostare lo script dopo il. Non del tutto sicuro se questo è kosher, ma spostando la sceneggiatura dopo che il corpo non sembra aiutare:/
Invece di spostare lo script, puoi anche fare l'accodamento in un gestore di eventi.
Se si verifica questo problema durante il tentativo di aggiungere un nodo in un'altra finestra in Internet Explorer, provare a utilizzare l'HTML all'interno del nodo anziché il nodo stesso.
myElement.appendChild(myNode.html());
IE non supporta l'aggiunta di nodi a un'altra finestra.
Hai provato questo? Anche in Chrome ho ricevuto TypeError: Impossibile eseguire "appendChild" su "Node": il parametro 1 non è di tipo "Node". (...).Questo perché .html() è di tipo stringa e appendChild si aspetta tipo nodo. – joedotnot
@Kelly Norton ha ragione nella sua risposta che The browser thinks the HTML you are attempting to append is XML
e suggerisce specifying the content type when fetching via XHR
.
È vero, tuttavia a volte si utilizzano librerie di terze parti che non si intende modificare. È l'interfaccia utente di JQuery nel mio caso. Quindi devi fornire il giusto Content-Type
nella risposta invece di sovrascrivere il tipo di risposta sul lato JavaScript.Imposta il tuo Content-Type
su text/html
e stai bene.
Nel mio caso, è stato facile come rinominare lo file.xhtml
in file.html
- il server delle applicazioni aveva qualche estensione per i mapping dei tipi MIME fuori dalla scatola. Quando il contenuto è dinamico, puoi impostare il tipo di risposta del contenuto in qualche modo (ad esempio, res.setContentType("text/html")
in Servlet API).
Questo ERRORE mi è successo in IE9 quando ho tentato di aggiungere dinamicamente a un bambino che era già presente in una finestra A. La finestra A creava una finestra figlio B. Nella finestra B dopo l'azione dell'utente veniva eseguita una funzione un appendChild sull'elemento del modulo nella finestra A utilizzando window.opener.document.getElementById('formElement').appendChild(input);
Ciò genera un errore. Lo stesso vale per la creazione dell'elemento di input utilizzando document.createElement('input');
nella finestra secondaria, passandolo come parametro alla finestra A di window.opener
e ivi inclusa. Solo se avessi creato l'elemento di input nella stessa finestra in cui stavo per aggiungerlo, sarebbe riuscito senza errori.
Così la mia conclusione (si prega di verificare): nessun elemento può essere creata in modo dinamico (utilizzando document.createElement
) in una finestra, e poi aggiunto (usando .appendChild
) per un elemento in un'altra finestra (senza prendere forse un particolare passo in più ho perso per assicurati che non sia considerato XML o qualcosa del genere). Questo fallisce in IE9 e genera l'errore, tuttavia in FF funziona bene.
PS. Non uso jQuery.
Grazie al puntatore, ho trovato un modo per aggirare questo. Si prega di vedere la risposta che ho postato se siete interessati interessati. –
Solo per riferimento.
IE bloccherà l'aggiunta di qualsiasi elemento creato in un contesto di finestra diverso dal contesto della finestra a cui l'elemento viene accodato.
es
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'));
non ho capito come creare un elemento DOM con jQuery utilizzando un contesto finestra diversa ancora.
Ottengo questo errore in IE9 se ho disabilitato l'opzione di debug degli script (Internet Explorer). Se abilito il debug degli script, non vedo l'errore e la pagina funziona correttamente. Sembra strano ciò che l'eccezione DOM ha a che fare con il debug abilitato o disabilitato.
L'errore si verifica anche quando si tenta di aggiungere un nodo a se stesso. Mi sono imbattuto in questo solo io :-) –
Ho appena ottenuto questo tentativo di aggiungere un null a un elemento (e un suggerimento totalmente non correlato - assicurati sempre che le tue funzioni restituiscano la cosa che hai scritto per restituire: P) –
Ho visto questo quando uno dei tag di chiusura mancava dal target. –