我正在研究两个ul列表。我需要的是,如果有人点击list1中的列表项,它将检查第二个列表是否包含被点击的元素。如果它不包含该元素,则将其复制,否则返回。
到目前为止我所做的是我在列表之间成功移动元素但如果我对其进行检查,一切都会停止工作。
以下是jsfiddle。
的链接$().ready(function() {
var classHighlight = 'highlight';
var $thumbs = $('ul li').on("click", function(e) {
//e.preventDefault();
debugger;
$thumbs.removeClass(classHighlight);
$(this).addClass(classHighlight);
});
$('#select1').on("dblclick", "li", function() {
//if($("#select2").has($(this))
//return;
//else
$(this).clone().appendTo('#select2').removeClass('highlight');
});
$('#select2').on("dblclick", "li", function() {
$(this).remove();
});
$('#add').click(function() {
$('#select1.highlight').clone().appendTo('#select2').removeClass(classHighlight);
});
$('#remove').click(function() {
$('#select2.highlight').remove();
});
});
如果您在代码中取消注释上述行,则一切都停止工作。 任何人都可以帮我这个吗?
由于
答案 0 :(得分:4)
尝试此检查:
var check = function(li) {
return $("#select2 li").filter(function(i, li2) {
return $(li2).text() == $(li).text();
}).length > 0;
};
当您使用clone()
时,您无法使用is()
或has()
将新克隆元素与原始元素进行比较,因为它是一个新元素,它与clone
的文档中所述的不一样:
创建匹配元素集的深层副本
所以它是副本。
答案 1 :(得分:1)
你有一个失踪的人。
此if($("#select2").has($(this))
应为if($("#select2").has($(this)))
。
你也可以传递这个:if($("#select2").has(this))
你必须检查长度:if($("#select2").has(this).length)