2011-11-18 66 views
0

我想創建一個ajax請求,我想給所有元素屬性。對於爲例我選擇我的所有元素:使用jquery元素屬性創建一個ajax請求

var elements = $('.droppable') 

,然後我讓我的ajax:

$.ajax({ 
    url: "test.html", 
    data: {myelements : elements}, 
     success: function(){ 

     } 
    }); 

我該怎麼做才能給我的一切元素屬性爲高度,寬度,位置,上,左 ...給我的ajax請求。我必須自己創建一個陣列還是有其他方法?

我想這樣做,因爲我想保存在數據庫中的所有元素的絕對位置。

謝謝你的幫助。

回答

4

你必須自己做,讓你想要的屬性列表。所以你不必做{ width : "width", height : "height" }等。通過以下方法,你可以把一個數組與元素和attr元素,到一個數組將被用作循環。

你甚至可能想分開attrcss數組,因爲當你從服務器取回數據時,你可以遍歷每個元素屬性和css對象。

像:

var attr = ["name", "id"]; 
var css = ["position", "left", "top"]; 
var elementsData = []; 

$('.droppable').each(function(){ 
    var data = {}; 
    for(var i in attr) 
    { 
     data[ attr[i] ] = $(this).attr(attr[i]); 
    } 
    for(var i in css) 
    { 
     data[ css[i] ] = $(this).css(css[i]); 
    } 

    elementsData.push(data); 
}); 


$.ajax({ 
    url: "test.html", 
    data: {myelements : elementsData}, 
     success: function(){ 
      $('.droppable').addClass("done"); 
     } 
    }); 
+0

謝謝!!!!! – Sebastien

1

你不能在$(this)裏面使用ajax成功,在這種情況下使用elements.addClass('done');

也是你能夠給多個元素設置不同高度/寬度/位置的唯一方法是你必須將每個元素的唯一ID發送到ajax表單,然後響應必須是包含該元素的唯一ID,高度,寬度,pos(最有可能是json),所以你可以通過它的唯一ID選擇每個元素,然後根據返回的對象更改值。

+2

*您可以使用*'$(本)',如果你設置的設置'context'屬性對象。雖然這不值得,但我同意。 – lonesomeday

+0

@lonesomeday我從來不知道'context':x你可以使用'context:$(this)'然後在成功使用$(this)嗎? –

+1

那麼,jQuery對象將是'this',所以你不需要將它包裝在jQuery構造函數中,但是,否則,是的。因此,您可以執行'this.append(result)',例如,將結果添加到jQuery選擇中的元素末尾。 – lonesomeday

1

我想你想循環遍歷元素並將每個單獨發佈到數據庫。在您的服務器方法返回一個JSON對象,你可以用它來找到elment在頁面上更新的類

$(".droppable").each(function(index, item){ 
    var id = $(item).attr("id"); //server will pass this back so you can select it later 
    var height = $(item).css("height"); 
    var width = $(item).css("width"); 
    // etc. 
    $.ajax({ 
    url: "test.html", 
    data: {id: height: height, width: width}, //add each property 
     success: function(data){ //data is returned by your server method 
      $(data.elementId).addClass("done"); //you passed elementId to the server as 'id' 
     } 
    }); 
}); 

,如果你想這樣做的一個要求,你可以建立一個關聯數組並傳遞。這裏已經很晚了,這已經不在我的頭頂了。這可能不是確切的語法,但希望它會指向你在正確的方向

var elements = new Array(); 
$(".droppable").each(function(index, item){ 
    var id = $(item).attr("id"); //server will pass this back so you can select it later 
    var height = $(item).css("height"); 
    var width = $(item).css("width"); 
    // etc. 

    var item = { id: id, height: height, width: width }; 
    elements.push(item); //an array of objects 
}); 

    $.ajax({ 
    url: "test.html", 
    data: {elements: elements} 
     success: function(data){ //data is returned by your server method 
     // set the class on success 
     } 
    }); 
+0

嗯,這是很多的要求,我可能會有300/400的對象:)但你說得對,這是一個解決方案,但我不認爲我的情況最好。謝謝 – Sebastien

+0

用另一種方法更新我的答案 – Jason