2011-11-18 68 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