2014-02-05 71 views
0

我对Javascript和jquery库的领域相当陌生,请耐心等待。jquery,针对新元素

我感到像这样家长专区内增加新的div操纵DOM:

var newdiv = document.createElement('div'); 
var addTst = document.getElementById("tst"); 
addTst.appendChild(newdiv) 

<div id ="tst"> 
//new divs will appear here 
</div> 

$("#tst div").draggable(); *//things I need to be draggable* 

#tst div{ 
height:50px; 
width:50px; 
background:red; 
margin:20px; 
display:inline-block; 
} 

但是我试图使用jQuery UI,以针对这些新的元素,使它们拖动。 (新的div是在初始文档加载之后由用户添加的,而不刷新Jquery /页面)。 当然,jquery只加载一次,所以添加的任何东西都保持不可裁剪。

我已经有一些AJAX在那里,这是加载数据好,但它很长,我不想重新运行整个AJAX功能只是为了刷新父divs的内容(假设AJAX可以更新与div新内容)。

为了帮助说明我添加了一个小提琴: http://jsfiddle.net/YuGhj/2/

正如你可以看到,第一个红色方块拖动罚款,但如果你使用该按钮添加一个新的孩子,他们是不能拖动。

我很可能完全误解了jQuery/AJAX的工作原理。

TL; DR 简而言之,我需要一种方法来定位在第一次加载页面后动态添加的元素,并将拖拽功能应用于它们。我假设我需要以某种方式刷新div,而不会丢失任何内容。

谢谢!

回答

0

使用jQuery操作DOM更容易。这里的代码来创建一个div,追加它,并在其上调用draggable

$('<div/>').appendTo('#tst').draggable(); 

演示:http://jsfiddle.net/MvXR3/

很多人似乎误解了如何选择和结合的工作。当你这样做:

$("#tst div").draggable(); 

也发现在该行执行并呼吁这些元素draggable()时间匹配"#tst div"的所有元素。添加新元素时,您需要在新元素上调用draggable()。先前的呼叫不适用。

+0

即时反馈哇。非常感谢。拯救生命。 我从来没有想过简单地链接追加和拖动。我会记住那个建议。 Noobs从我身上评价。再次感谢。 – Benji40