2012-01-12 2 views
2

Я добавляю элементы динамически с помощью Javascipt:Как получить смещение динамически созданных элементов?

$('.marker').append('<div class="container" id="id' + counter + '" ><input type="text" name="textbox" id="textbox' + counter + '" value="" ></div>'); 
counter++; 

И мне нужно иметь позиции (смещение х и у) этих добавленных элементов. Пользователь может добавлять и удалять эти элементы. Затем он должен быть сохранен, и мне нужно иметь окончательный список позиций элементов.

Я пробовал использовать функцию jquery offset(), но он работал только для не динамически добавленных элементов.

Можно ли получить смещение этих динамически добавленных элементов? И если да, то как?

+2

Использование 'offset' должно работать нормально. См. Этот пример скрипта: http://jsfiddle.net/XGPt9/3/ –

+0

Возможно, вам следует показать код, используемый для обнаружения смещения для динамически создаваемых элементов. Это определенно возможно, если эти элементы находятся в документе. – marchaos

ответ

3

Не уверен, если вы» не очень хорошо объясняю, так как следующий пример делает то, что вы просите ...

http://jsfiddle.net/johncmolyneux/zXSuh/

Просто откройте консоль и запустите ее.

Вот код, который показывает значения смещения в консоли ...

$(".container").each(function() { 
    console.log($(this).offset().top); 
}); 
+0

Пожалуйста, включите код в свой ответ, jsfiddle может не всегда быть рядом, и даже сейчас он слишком долго загружается, чтобы даже потрудиться, глядя на код. – Esailija

+0

Это швы, что у меня был мой .offset в неправильном месте в коде. Благодаря вашей скрипке я смог заставить ее работать. – Marta

+0

@Esailija Хорошая мысль - я сделаю это сейчас. – Archer

0

Вы пытались назначить переменный динамически созданный элемент следующим образом:

var el = $('<div class="container" id="id' + counter + '" ><input type="text" name="textbox" id="textbox' + counter + '" value="" /></div>'); 

$('.marker').append(el); 
counter++; 

Тогда вы должны быть в состоянии использовать el.offset():

el.offset(); 
2
var div = $("<div>", { 
    "class": "container", 
    id: "id" + counter 
}).append($("<input>", { 
    type: "text", 
    name: "textbox", 
    id: "textbox" + counter 
})); 

$(".marker").append(div); 

var offset = div.offset(); 
console.log(offset.left, offset.top); 

counter++; 
Смежные вопросы