如何从ajax调用返回的.wrap()元素

时间:2016-05-17 18:08:31

标签: javascript jquery ajax

更新:答案适用于FILTER而不是......我不知道为什么。

这让我很难过。我到处搜索过,但我没有找到这个具体的问题,所以我发帖了。

我有一个应用程序,我填写了一些表格,然后通过jquery ajax提交到php文件,然后获取数据。当我得到数据时,我试图用另一个div包装每个.contentarea类,但是我无法让它工作。

这是我所拥有的

$(document).delegate('.moduleform', 'submit', function(event) {
event.preventDefault();

formData = $(this).serialize();
$.ajax({
type: "POST",
dataType: "text",
url: "layouts/" + folder + "/make-layout.php",
data: formData
}).done(function(data) {

$(data).filter('.contentarea').each(function(){

var html = $(this).html();
$(html).wrap('<div class="contentarea_container" data-module="freeform"></div>');

});

$('#container').append(data);
$('#load').dialog('close');
$('#loadContent').empty();

});
});

当我在console.log($(this));它看起来像是控制台中的一个对象。当我在console.log($(this).html());它看起来像HTML。但由于某种原因,我无法弄清楚如何用另一个div包装每个.contentarea。

我认为它与将数据转换为HTML并返回或类似的东西有关。我能够在数据变量中定位项目,但由于某种原因,我无法使包裹工作。请帮忙!

1 个答案:

答案 0 :(得分:1)

.wrap直接处理DOM。因此,您首先将data附加到#container,然后像这样调用.wrap

$(document).delegate('.moduleform', 'submit', function(event) {
  event.preventDefault();

  formData = $(this).serialize();
  $.ajax({
    type: "POST",
    dataType: "text",
    url: "layouts/" + folder + "/make-layout.php",
    data: formData
  }).done(function(data) {
    var $data = $(data).appendTo('#container');
    $data.find('.contentarea').wrap('<div class="contentarea_container" data-module="freeform"></div>');
    $('#load').dialog('close');
    $('#loadContent').empty();
  });
});

演示:

var data = '<div><div class="contentarea">c</div></div><div><div class="contentarea">d</div></div>';
var $data = $(data).appendTo('#container');
$data.find('.contentarea').wrap('<div class="contentarea_container" data-module="freeform"></div>');
$('#out').text($('#container').html());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
  <div>
    <div class="contentarea">a</div>
  </div>
  <div>
    <div class="contentarea">b</div>
  </div>
</div>
<div id="out"></div>