检查DIV内是否存在元素

问题描述:

我想单击时移动div内的元素,除非它已经在它内部。我想是这样......检查DIV内是否存在元素

点击标签>如果元素是DIV无能为力>否则移动元素到DIV

http://jsfiddle.net/establish/Xhhe8/

HTML

<ul> 
    <li><a href="#" class="tag">Art</a></li> 
    <li><a href="#" class="tag">Computing</a></li> 
    <li><a href="#" class="tag">Design</a></li> 
</ul> 

<div id="crate"> 
</div> 

jQuery的

$('.tag').on('click', function(event) { 

if ($('#crate').has(this)) { 
    // do nothing 
} 

else { 

    $(this).appendTo('#crate'); 
} 
}); 

它不起作用。也不知道如何表示“什么也不做”,通常我只是使用单独的IF语句,因此不需要表示它。我可以这样做“无所作为”并禁用点击吗?

$(this).off(); 

这应该做到这一点..

$('.tag').on('click', function(event) { 

    var self = $(this); 
    if (self.closest('#crate').length) { 
     // do nothing 
    } 
    else { 
     self.appendTo('#crate'); 
    } 

}); 

您通常使用if not表示if声明相反(即!=更换==):

$('.tag').on('click', function(event) { 
    if ($(this).parent().get(0) != $('#crate').get(0)) { 
     $(this).appendTo('#crate'); 
    } 
}); 

不是检查是否该元素存在于父项中,为什么不比较父项?

演示:http://jsfiddle.net/Xhhe8/3/

盖比的回答会的工作,但我宁愿将其结构没有空if块这样的:

$('.tag').on('click', function(event) { 
    var self = $(this); 
    if (self.closest('#crate').length == 0) { 
     self.appendTo('#crate'); 
    } 
}); 
+0

好点。我以为他可能最终想要删除元素,如果它在里面.. –

+0

我确实想删除它!谢谢,应该说明。 –

+0

@DanChristian - 删除什么和在什么情况下? – jfriend00

你可以试试这个(我只是调整了一下你的代码):

$('.tag').on('click', function(event) { 

    if ($('#crate').find(this).length) { 
     // do nothing 
    } 

    else { 

     $(this).appendTo('#crate'); 
    } 
}); 

我来!

或者这样:

$('.tag').click(function() { 
    if ($(this).parent().attr('id') != "crate") { 
     $(this).appendTo('#crate') 
    } 
}); 

http://jsfiddle.net/establish/Xhhe8/

我会做以下,根据Alex的答案:

$('.tag').on('click', function(event) {  
    if ($('#crate').find(this).length < 1) { 
     $(this).appendTo('#crate'); 
     $(this).off('click') 
    } 
    }); 

我认为,如果条款使得在这种情况下,更多的意义;我们只是检查箱子元素是否有'this'。 (if($('#crate')。has(this))“的语义是误导性的,因为当它实际上返回一个空数组时,它将会得到一个布尔值,该数组在JavaScript中的计算结果为true。所以,即使“#crate”具有实际的元素,if条件始终为真。