2016-05-17 29 views
0

更新:答案適用於篩選未找到....我不知道爲什麼。如何從ajax調用返回的.wrap()元素

這讓我難住了。我到處搜索,但我還沒有找到這個具體的問題,所以我張貼它。

我有一個應用程序,我填寫了一些表格,然後通過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($(本));它看起來像控制檯中的一個對象。當我console.log($(this).html());它看起來像HTML。但出於某種原因,我無法弄清楚如何將每個.contentarea與另一個div包裝起來。

我認爲它與將數據轉換爲HTML並返回,或類似的東西有關。我可以定位數據變量中的項目,但出於某種原因,我無法讓包裝工作。請幫忙!

回答

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>

+0

我想過,但問題是,我有其他.contentarea在頁面上我不想受到影響... – garek007

+0

@ garek007,我想你可以使用'appendTo'而不是'append'來獲得你剛添加的元素的引用,然後使用'.find('。contentarea' )'操作你想要的元素 – Fabricator

+0

感謝讓我試試 – garek007