2016-10-07 3 views
1

(Полный код ниже)JQuery Append() не работает для каскадного строки

Это

$('#' + id).parent().append('<div id="pop-up">hello</div>'); 

делает работу. Но это

$('#' + id).parent().append('<div id="pop-up-' + id + '">hello</div>'); 

нет.

Тот факт, что первая версия работает позволяет мне предположить, что проблема заключается не в id переменной ...

Так что полный код

function clickOnElement(id) { 
    var obj = {}; 
    obj.clicked = String(id); 
    var jsonData = JSON.stringify(obj); 
    $.ajax({ 
     type: 'POST', 
     url: '../db/RequestHandler.ashx', 
     data: jsonData, 
     contentType: 'application/json; charset-utf-8', 
     success: function (response) { 
      // Add the div for the dialog-box 
      $('<div>Hello</div>', { 
       "id": "pop-up" + id 
      }).appendTo($('#' + id).parent()); 
     }, 
     error: function() { 
      console.log("request error"); 
     } 
    }); 
} 
+0

'.append' ожидает элемент, а не строка. Если у вас есть HTML-строка, используйте '.html()' вместо – Rajesh

+0

'.append()' будет работать после загрузки DOM. Загружается родительский div, но одновременно вы добавляете этот элемент, который в то время не был в DOM. попытайтесь добавить после того, как документ готов. –

+0

работает отлично для меня https://jsfiddle.net/gx6mrqr7/ – madalinivascu

ответ

1

Попробуйте следующее

var parent = $('#' + id).parent(); 
var el = $('<div>', {id: "pop-up"+id,text:"hello"}); 
el.appendTo(parent); 

правильный способ добавить текст в созданный объект является использование свойства текста:

демо: https://jsfiddle.net/gx6mrqr7/

+0

Это действительно сработало. Спасибо. Любые предложения почему? – elementzero23

+0

из того, что я могу сказать, jquery не может добавить свойство в закрытый div '

Hello
' – madalinivascu

+0

Я также заметил, что '' pop-up- "+ id' не работает, но' 'pop-up" + id' does , – elementzero23

2

Использование .appendTo()

  • Методы .append() и .appendTo() выполняют ту же задачу.
  • Основное различие заключается в синтаксисе, в частности, при размещении контента и цели.
  • С .append() выражение селектора, предшествующее методу, является контейнером, в который вставлен контент.
  • С другой стороны, с .appendTo() содержимое предшествует методу, либо как выражение выбора, либо как разметка, созданная «на лету», и она вставляется в целевой контейнер.

Пример кода

$('<div>Hello</div>', { 
    "id": "pop-up" + id 
}).appendTo($('#' + id).parent()); 

FYI,

Пожалуйста, убедитесь, что элемент существует в DOM, и вы его добавления в правильном селекторе.

Надеюсь, что это поможет.

+0

Да, вы допустили ошибку с помощью '' ', но я исправил его. Этот '$ ('#' + id).parent(). append ("

hello
"); 'похоже, работает. Может кто-нибудь объяснить, почему? – elementzero23

+0

Я обновил свой ответ, просто убедитесь, что вы используете 'appendTo' на правильном. –

+0

Нет ничего плохого в '.append()' это просто кавычка confilct. –

1

Создание HTML с помощью jQuery(html, attributes), вы будете в безопасности от котировок беспорядке

$('#' + id) 
    .parent() 
    .append($('<div>', { 
     id: "pop-up-" + id , 
     text: "hello" 
    }); 
Смежные вопросы