2016-09-12 1 views
-3

Excuses, je sais qu'il y a un certain nombre de questions dans le même sens et elles m'ont beaucoup aidé mais je suis toujours tomber à l'obstacle final.Ajout dynamique jquery dans div

J'essaie d'ajouter dynamiquement une jQuery dans un div en utilisant ceci:

function displayPage(position,page){ 
    // position arrives looking something like '#pageW20' - ignore quotes 
    // page arrives looking something like 'pages/benefits.html' - ignore quotes 
    var pos = position.substring(1); // New variable without the '#' that appears in the first character of position 
    var myDiv = document.getElementById(pos); // Find the div, typically equates to a div id similar to 'pageW20' 
    var str = "<script type='text/javascript'>"; 
/* Build the script which typically looks like this:- 
<script type='text/javascript'> $("#pageB15").load("pages/benefits.html", function(){openLetter()}); </script> 
*/ 
    str += '$(' + '"' + position + '"' +').load(' + page + ', function(){openLetter()})'; 
    str += '<'; 
    str += '/script>'; 
    alert(str); // Works to here, alert churns out expected output. 
    //$('"' + position + '"').append(str); // Tried this, end up with syntax error 
    myDiv.appendChild(str); // This gives Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'. 
} 

Les deux dernières lignes montrent les erreurs que je reçois d'essayer 2 méthodes différentes. Des indices Merci d'apprécier votre intérêt.

Mise à jour: Voici ce que je reçois dans ma console à l'étape d'alerte() qui est ce que j'espérais -

<script type='text/javascript'>$("#pageW20").load("pages/work.html", function(){openLetter()})</script> 

Mise à jour: maintenant résolu, grâce @gaetano. Mon code ressemble maintenant à:

function displayPage(position,page){ 
    var pos = position.substring(1); 
    var myDiv = document.getElementById(pos); 
    myDiv.innerHTML=""; // Remove existing div content 
/* Build the script which typically looks like this:- 
<script type='text/javascript'> $("#pageB15").load("pages/benefits.html", function(){openLetter()}); </script> 
*/ 
    var str = '$(' + '"' + position + '"' +').load(' + page + ', function(){openLetter()});'; 
    console.log(str); 
    var s = document.createElement('script'); 
    s.type = 'text/javascript'; 
    s.text = str; 
    myDiv.appendChild(s); 
} 
+0

code spectacle que Je peux vous aider –

+4

Pourquoi essayez-vous d'ajouter dynamiquement jQuery à un div? Ne pouvez-vous pas simplement écrire votre script et le faire exécuter en utilisant les divs comme sélecteurs? En outre, le code HTML serait apprécié, il donne un meilleur contexte au problème que vous rencontrez – Turk

+1

C'est une façon vraiment étrange de faire quoi que ce soit en Javascript. Je ne peux que supposer que c'est votre solution X/Y pour ajouter du contenu à un élément créé dynamiquement, auquel cas vous devriez regarder dans les gestionnaires d'événements délégués –

Répondre

1

Je ne comprends pas pourquoi vous essayez de créer et ajouter un script à la volée comme décrit dans les commentaires.

L'erreur que vous obtenez est:

myDiv.appendChild (str); Mais appendChild nécessite comme premier paramètre un nœud.

Donc, si vous devez continuer dans cette direction, vous devez créer un élément de noeud de script et après vous pouvez l'ajouter à la html comme dans mon exemple:

function displayPage(position, page) { 
 
    var pos = position.substring(1); // New variable without the '#' that appears in the first character of position 
 
    var myDiv = document.getElementById(pos); // Find the div, typically equates to a div id similar to 'pageW20' 
 
    var str = '$(' + '"' + position + '"' + ').load("' + page + '", function(){openLetter()})'; 
 
    var s = document.createElement('script'); 
 
    s.type = 'text/javascript'; 
 
    s.text = str; 
 
    myDiv.appendChild(s); 
 
} 
 

 
displayPage('_XXX', 'page'); 
 

 
console.log(document.getElementById('XXX').outerHTML);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 

 
<div id="XXX"></div>

+0

Merci @gaetanoM, pas encore là mais je pense que je vais y arriver. Mon script apparaît là où il devrait maintenant. Je posterai quand je serai là. –

+0

Cracked, merci @gaetano, j'ai eu quelques erreurs, 1) le div que j'essayais de charger ceci n'était pas vide avant mon appel de fonction, donc je devais effacer d'abord, puis 2) un couple de code de syntaxe mineure les erreurs. Votre code a très bien fonctionné! Merci beaucoup. –

+0

@RogerW Pour vider la div vous pouvez utiliser: myDiv.innerHTML = ""; Merci beaucoup – gaetanoM

1

La variable str vous passez n'est pas un nœud, il est une chaîne. Essayez d'abord en utilisant:

var line = document.createElement("p"); 
line.innerHTML = str; 
myDiv.appendChild(line); 
+0

Merci @Ish Je suis au moins passé l'étape de l'erreur maintenant. Peut maintenant être capable de déterminer pourquoi le javascript/jquery ne s'affiche pas correctement. Je posterai. –

+1

L'élément 'script' peut également être utilisé:' var scriptElement = document.createElement ("script"); 'Lien: [objet html dom: Script] (http://www.w3schools.com/jsref/dom_obj_script.asp) – mk117

+0

Eh bien, il y avait une erreur de syntaxe mineure dans ma construction de script de chaîne, maintenant corrigée. Le javascript apparaît maintenant correctement dans ma div, mais il n'est pas appelé lorsque je clique sur le lien qui est censé l'activer. Pour info, j'ai une charge de ces divs, la plupart sont construits avec HTML droit, chacun avec des liens pour les afficher, ceux-ci fonctionnent.La fonction displayPage que je montre est pour la poignée de divs qui devraient contenir le javascript que je montre ci-dessus, ceux-ci ne le font pas. Est-ce une question de la page ne pas avoir enregistré il y a nouveau javascript là-bas? –