我试图检测一个元素是否已经使用$ contains
附加到DOM中var isAlreadyAppended = function(key){
return ($.contains($('#allBellMessageId'), $("#" + key)));
};
var test= function(){
if(!isRepeated('a')){
//Append into DOM
};
if(!isRepeated('b')){
//Append into DOM
};
if(!isRepeated('c')){
//Append into DOM
};
if(!isRepeated('a')){
//Append into DOM
};
}
添加密钥a,b,c,a仍然返回false,false,false,false。
生成的html代码就是这个
<li id="bellMessagesId" class="dropdown notifications">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<ul id="allBellMessageId" class="dropdown-menu bellMessage-dropdown-menu">
<div class="col-xs-12">
<li id="a" class="col-xs-12">
<li id="b" class="col-xs-12">
<li id="c" class="col-xs-12">
<li id="a" class="col-xs-12">
</ul>
</li>
<li>
渲染是4条消息,a,b,c,a。
我做错了什么?。
问候。
答案 0 :(得分:2)
isRepeated()
不会返回任何内容,只会执行。由于它没有返回任何内容,因此会返回undefined
,因此当您检查时,它会说undefined
并评估为false
。所以试试这个:
var isRepeated(key) = function(key){
return $.contains($('#fooElements'), $("#" + key))
};
除此之外,我对$.contains
不是很熟悉,所以你可以尝试以下方法:
var isRepeated(key) = function(key){
return $('#fooElements').find("#" + key).length ? true : false;
};
我一直用它来检查某些东西是否存在,它就像一个魅力。
答案 1 :(得分:1)
.contains()的第一个参数必须是DOM元素,而不是jQuery对象或纯JavaScript对象。尝试运行循环并使用
$.contains($('#fooElements')[i], $("#" + key)[0])
或类似的东西。
答案 2 :(得分:0)
如果您正在寻找已附加到DOM的元素,我认为您的问题与Event Delegation有关。
加载DOM后的任何内容都未注册。因此,如果您要将元素附加到某个元素,则必须首先检查其父元素。
来自文档:
$( "#list" ).on( "click", "a", function( event ) {
event.preventDefault();
console.log( $( this ).text() );
});
如果<a>
标记附加到#list
元素,则首先需要检查#list
元素,然后检查a
标记。