Javascript 使用jquery在悬停时添加div
我构建了一个类似“trip planner”的项目,但我需要在克隆的div对象上添加一条垂直线,位于css的左边框上:Javascript 使用jquery在悬停时添加div,javascript,jquery,html,css,jquery-ui,Javascript,Jquery,Html,Css,Jquery Ui,我构建了一个类似“trip planner”的项目,但我需要在克隆的div对象上添加一条垂直线,位于css的左边框上: .line { width:5px, height:200px; background:red;} 所以成为某样东西(你可以看到悬停在一条垂直线上) 我试图用代码实现这一点: $(function() { //$( ".draggable" ).resizable(); $( ".draggable" ).draggable({ revert:
.line
{ width:5px, height:200px; background:red;}
所以成为某样东西(你可以看到悬停在一条垂直线上)
我试图用代码实现这一点:
$(function() {
//$( ".draggable" ).resizable();
$( ".draggable" ).draggable({
revert: 'invalid',
helper:"clone",
snap: "#drop_here td",
opacity: 0.7
});
$( "#drop_here td" ).droppable({
// accept only from left div,
// this is necessary to prevent clones duplicating inside droppable
accept: '#left .draggable',
drop: function( event, ui ) {
// 4 append clone to droppable
$( this ).append(
// 1 clone draggable helper
$(ui.helper).clone()
// 2 make the clone draggable
.draggable({
containment:"#table",
snap: "#drop_here td"
})
// 3 make the clone resizable
.resizable());
//HERE IS MY PROBLEM IN CODE
$(".draggable").hover(function() {
$(this).append("<div class='line'></div>");
}, function() {
$(this).removeClass("line");
});
}
});
});
$(函数(){
//$(“.draggable”).resizeable();
$(“.draggable”).draggable({
还原:“无效”,
助手:“克隆”,
抓拍:“把你放在这里”,
不透明度:0.7
});
$(“#在此处放置td”)。可放置({
//仅从左div接受,
//这是必要的,以防止克隆复制内可拖放
接受:“#左。可拖动”,
drop:函数(事件、用户界面){
//4将克隆附加到可拖放
$(此)。附加(
//1克隆可拖动辅助程序
$(ui.helper.clone())
//2使克隆可拖动
.拖拉({
遏制:“表格”,
抓拍:“把你放在这里”
})
//3使克隆可调整大小
。可调整大小();
//这是我在代码方面的问题
$(“.draggable”).hover(函数(){
$(此)。追加(“”);
},函数(){
$(此).removeClass(“行”);
});
}
});
});
但是不要工作
您的“hover out”处理程序从$中删除类(this)--而不是从附加的子级中删除类
动态地在hover上创建元素可能是一种不好的做法,这些元素永远不会被删除,并且可能会逐渐用垃圾填充文档。第一个问题是,您的
css
有一个,
而不是代码>
.line {
display: none;
width: 5px;
height: 200px;
background: red;
}
然后对jquery
进行如下修改:
$('.draggable').hover(function(){
$(this).find('.line').show();
}, function() {
$(this).find('.line').hide();
});
在您的标记中,将.line
(仅一行)放置在之后,而不是悬停在上,否则每次您将悬停在上时,它都会附加它
jsIDLE:您必须像下面这样绑定文档中的.hover():
$(document).ready(function(){
$(".draggable").hover(function() {
$(this).append("<div class='line'></div>");
}, function() {
$(this).children('.line').remove();
});
});
$( ".draggable" ).draggable({
revert: 'invalid',
helper:"clone",
snap: "#drop_here td",
opacity: 0.7,
start: function(event, ui){
var clone = $(ui.helper);
if (clone.children('div.line').length == 0)
clone.append("<div class='line'></div>");
}
});
$(文档).ready(函数(){
$(“.draggable”).hover(函数(){
$(此)。追加(“”);
},函数(){
$(this.children('.line').remove();
});
});
如果只想将行添加到克隆中,请将start属性添加到可拖动选项中,如下所示:
$(document).ready(function(){
$(".draggable").hover(function() {
$(this).append("<div class='line'></div>");
}, function() {
$(this).children('.line').remove();
});
});
$( ".draggable" ).draggable({
revert: 'invalid',
helper:"clone",
snap: "#drop_here td",
opacity: 0.7,
start: function(event, ui){
var clone = $(ui.helper);
if (clone.children('div.line').length == 0)
clone.append("<div class='line'></div>");
}
});
$(“.draggable”).draggable({
还原:“无效”,
助手:“克隆”,
抓拍:“把你放在这里”,
不透明度:0.7,
开始:功能(事件、用户界面){
var clone=$(ui.helper);
if(clone.children('div.line')。长度==0)
克隆。追加(“”);
}
});
测试了这个,它就像一个符咒。。不要忘记卸下此部件:
$(".draggable").hover(function() {
$(this).append("<div class='line'></div>");
}, function() {
$(this).removeClass("line");
});
$(“.draggable”).hover(函数(){
$(此)。追加(“”);
},函数(){
$(此).removeClass(“行”);
});
dude它正在工作..检查代码..不,悬停上的垂直线不会显示非常干净的解决方案:)但我只需要克隆对象时使用它。。。同样是Samedode,您缺少添加。行到draggable,我在我链接的一个中创建了它,它工作得非常完美。听着,这个codesteo的答案并不完全正确。。它将显示和隐藏具有类“line”的所有元素。。但是一开始就没有。。我刚刚复制了您的代码,但在mouseout处理程序中,您不应该只删除line元素的类,而应该使用$(this).children('.line').remove();相反我为你更新了我的第一篇文章。不,你的方法不正确:每次创建一个行div,这是一个糟糕的方法,我会修复我的代码。你可以轻松地在悬停状态下创建dom元素,只要你在mouseout上删除它们。不,这还不错。。这是一个很好的解决方案,创建和删除dom元素没有问题。这就是javascript的用途。。dom操作。当你不需要的时候,这是一种糟糕的方法。就我的两分钱。好的,它在这里。。我现在将其保存为模板。。或者我还应该做什么?我对jsbin不太了解..只需进入BINS,然后克隆,然后复制链接并粘贴到此处我不知道。。元素就在那里。。而且只有在克隆中。。请注明答案。。您的css可能有问题。。或者尝试在divok中添加“”(不间断空格)好的,我会标记答案,但如果您可以通过电子邮件发送此代码,请发送给我:mslavko6@gmail.com…进入垃圾箱/下载并发送到电子邮件mslavko6@gmail.com