In che modo si collega esattamente a jQuery? So che la libreria utilizza internamente funzioni javascript native, ma cosa sta esattamente cercando di fare ogni volta che si presenta un problema del genere?
In che modo si collega esattamente a jQuery? So che la libreria utilizza internamente funzioni javascript native, ma cosa sta esattamente cercando di fare ogni volta che si presenta un problema del genere?
Risposte:
Significa che hai provato a inserire un nodo DOM in una posizione nella struttura DOM dove non può andare. Il posto più comune che vedo questo è su Safari che non consente quanto segue:
document.appendChild(document.createElement('div'));
In generale, questo è solo un errore in cui questo è stato effettivamente inteso:
document.body.appendChild(document.createElement('div'));
Altre cause osservate in natura (riassunto dai commenti):
<!doctype html>
all'HTML iniettato o specificando il tipo di contenuto durante il recupero tramite XHR)response.xml
dove disponibile. Ad esempio,$(e).append(response.xml || $(response));
Se si riceve questo errore a causa di un jacquery ajax, chiamare $ .ajax
Quindi potrebbe essere necessario specificare quale tipo di dati sta tornando dal server. Ho risolto molto la risposta usando questa semplice proprietà.
$.ajax({
url: "URL_HERE",
dataType: "html",
success: function(response) {
$('#ELEMENT').html(response);
}
});
Questo errore può verificarsi quando si tenta di inserire un nodo nel DOM che è HTML non valido, che può essere qualcosa di sottile come un attributo errato, 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
@Kelly Norton ha ragione nella sua risposta 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 usi librerie di terze parti che non intendi modificare. È l'interfaccia utente di JQuery nel mio caso. Quindi è necessario fornire il diritto Content-Type
nella risposta anziché sovrascrivere il tipo di risposta sul lato JavaScript. Imposta il tuo Content-Type
per text/html
e si sta bene.
Nel mio caso, è stato facile come rinominare il file.xhtml
per file.html
- server di applicazione avuto qualche estensione MIME tipi di mappature fuori dalla scatola. Quando il contenuto è dinamico, è possibile in qualche modo impostare il tipo di contenuto della risposta (ad es. res.setContentType("text/html")
Nell'API Servlet).
Puoi vedere queste domande
o
Finestra di dialogo dell'interfaccia utente jQuery con postback del pulsante ASP.NET
La conclusione è
quando si tenta di utilizzare la funzione append, è necessario utilizzare una 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 sopra, usa var "dlg" per eseguire la funzione appendTo. Quindi l'errore "HIERARCHY_REQUEST_ERR" non verrà più visualizzato.
Ho riscontrato questo errore durante l'utilizzo dell'estensione Google Chrome Sidewiki. Disabilitarlo ha risolto il problema per me.
Ho intenzione di aggiungere una risposta più specifica qui perché è stata una ricerca di 2 ore per la risposta ...
Stavo cercando di iniettare un tag in un documento. L'html era così:
<map id='imageMap' name='imageMap'>
<area shape='circle' coords='55,28,5' href='#' title='1687.01 - 0 percentile' />
</map>
Se noti, il tag viene chiuso nell'esempio precedente ( <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 di sicuro non funziona in Chrome. Firefox non lo accetterà con <area/>
o <area></area>
o<area>
. Chrome deve avere <area>
. IE accetta qualsiasi cosa.
Comunque, questo errore può essere dovuto al fatto che il tuo HTML non è corretto.
So che questo thread è vecchio, ma ho riscontrato un'altra causa del problema che altri potrebbero trovare utili. Stavo ottenendo l'errore con Google Analytics che cercava di accodarsi a un commento HTML. Il codice offensivo:
document.documentElement.firstChild.appendChild(ga);
Ciò stava causando l'errore perché il mio primo elemento era un commento HTML (ovvero un codice modello di Dreamweaver).
<!-- #BeginTemplate "/Templates/default.dwt.php" -->
Ho modificato il codice offensivo in qualcosa di certo non a prova di proiettile, ma meglio:
document.documentElement.firstChild.nodeType===1 ? document.documentElement.firstChild.appendChild(ga) : document.documentElement.lastChild.appendChild(ga);
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.
Questo errore si è verificato in IE9 quando ho provato ad aggiungereChild an in modo dinamico a quello già esistente in una finestra A. La finestra A creava una finestra figlio B. Nella finestra B dopo un'azione dell'utente una funzione veniva eseguita e faceva un'appendice elemento del modulo nella finestra A utilizzando window.opener.document.getElementById('formElement').appendChild(input);
Ciò genererebbe un errore. Lo stesso con la creazione dell'elemento di input utilizzando document.createElement('input');
nella finestra figlio, passando come parametro alla window.opener
finestra A, e lì fa l'appendice. Solo se creassi l'elemento di input nella stessa finestra in cui lo avrei aggiunto, avrebbe funzionato senza errori.
Quindi la mia conclusione (si prega di verificare): nessun elemento può essere creato dinamicamente (usando document.createElement
) in una finestra, e quindi aggiunto (usando .appendChild
) a un elemento in un'altra finestra (senza fare forse un passo extra particolare che mi sono perso per assicurarsi che non sia considerato XML o qualcosa). Questo fallisce in IE9 e genera l'errore, in FF però funziona benissimo.
PS. Non uso jQuery.
Un altro motivo per cui questo può emergere è che stai aggiungendo prima che l'elemento sia pronto, ad es
<body>
<script>
document.body.appendChild(foo);
</script>
</body>
</html>
In questo caso, dovrai spostare lo script dopo il. Non sono del tutto sicuro che sia kosher, ma spostare la sceneggiatura dopo il corpo non sembra aiutare: /
Invece di spostare lo script, puoi anche eseguire l'aggiunta in un gestore eventi.
Solo per riferimento.
IE bloccherà l'aggiunta di qualsiasi elemento creato in un contesto di finestra diverso dal contesto di finestra a cui viene aggiunto l'elemento.
per esempio
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 ancora capito come creare un elemento dom con jQuery usando un contesto di finestra diverso.
Ottengo questo errore in IE9 se avevo 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 cosa abbia a che fare l'eccezione DOM con il debug abilitato o disabilitato.