2016-09-12 3 views
-3

Извинения. Я знаю, что есть ряд вопросов по тем же линиям, и они мне очень помогли, но я все еще падаю на последний барьер.Динамическое добавление jquery в div

Я пытаюсь динамически добавлять некоторые JQuery в DIV с помощью этого:

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'. 
} 

Последние две строки показывают ошибки я получаю пытаясь 2 разные методы. Любые подсказки. Спасибо за ваш интерес.

Update: Вот что я получаю в моей консоли на стадии предупреждения(), которая является то, что я надеялся на -

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

Update: Теперь решена, благодаря @gaetano. Мой код теперь выглядит следующим образом:

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

показать код, чем Я могу помочь вам –

+4

Почему вы пытаетесь добавить jQuery в div динамически? Можете ли вы просто написать свой скрипт прямо и выполнить его с помощью divs в качестве селекторов? Кроме того, будет оценен HTML-код, который дает лучший контекст проблемы, с которой вы столкнулись. – Turk

+1

Это действительно странный способ сделать что-либо в Javascript. Я могу только предположить, что это ваше решение X/Y для добавления контента в динамически созданный элемент, и в этом случае вы должны посмотреть на делегированные обработчики событий. –

ответ

1

Я не могу понять, почему вы пытаетесь создать и добавить скрипт на лету, как описано в комментариях.

Ошибка Вы получаете:

myDiv.appendChild (ул);

Но appendChild требует в качестве первого параметра узла.

Так что, если вам нужно продолжать в этом направлении, вы должны создать элемент узла сценария и после того, как вы можете добавить его в HTML, как в моем примере:

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

Спасибо @gaetanoM, еще нет, но думаю, что я туда доберусь. Мой скрипт появляется там, где он должен сейчас. Я отправлю обратно, когда я там. –

+0

Cracked it, thanks @gaetano, у меня было несколько ошибок: 1) div, который я пытался загрузить, не был пуст перед вызовом моей функции, поэтому мне сначала нужно было очистить его, затем 2) пару младших синтаксических кодов ошибки. Ваш код работал просто отлично! Спасибо. –

+0

@RogerW Чтобы очистить div, вы можете использовать: myDiv.innerHTML = ""; огромное спасибо – gaetanoM

1

str переменных вы передаете не узел, это строка. Попробуйте сначала, используя:

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

Спасибо @ Ish Я, по крайней мере, пройду стадию ошибок. Теперь можно отслеживать, почему javascript/jquery не отображается корректно. Я отправлю обратно. –

+1

Элемент 'script' также может использоваться:' var scriptElement = document.createElement ("script"); 'Ссылка: [html dom object: Script] (http://www.w3schools.com/jsref/dom_obj_script.asp) – mk117

+0

Ну, была небольшая синтаксическая ошибка в моем строковом сценарии, теперь исправлена. Javascript теперь отображается правильно в моем div, но не вызывается, когда я нажимаю ссылку, которая должна активировать ее. FYI У меня есть груз этих div, большинство из них построены с прямым HTML каждый со ссылками для их отображения, эти работы.Функция displayPage, которую я показываю, предназначена для нескольких div, которые должны содержать javascript, который я показываю выше, это не так. Это вопрос о том, что страница не зарегистрирована, там есть новый javascript? –