JQuery包含不工作多个li

时间:2015-03-09 12:56:42

标签: javascript jquery html

我试图检测一个元素是否已经使用$ 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。

我做错了什么?。

问候。

3 个答案:

答案 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)

From jQuery documentation

.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标记。