1

我有一个看起来像这样的 html:

<div class="info">
      <p>132 Purple Grove</p>
      <p>Albany, Texas 76801</p>
      <p class="phone">
          <span>Phone: (111) 111-1111</span>
      </p>
      <p class="fax">Fax: (111) 111-1111</p>
</div>

使用cheerio,我想得到一个数组,其中所有p 元素都没有“电话”或“传真”类。Cheerio 没有 .not 功能,所以我试图用这样的过滤器复制它:

var addresslines=$(.info).children('p').filter(function(n){ 
  if(!$(n).hasClass('phone') && !$(n).hasClass('fax')){
    return n;
  }
});

结果,我得到了以下数组(我已经删除了换行符),它过滤掉了第一个元素并保持其他元素不变。我似乎无法理解为什么...

结果 :

0 Albany, Texas 76801
1 Phone: (111) 111-1111
2 Fax: (111) 111-1111 

小提琴:http: //jsfiddle.net/2cPLK/

4

2 回答 2

4

当 filter 将函数作为参数时,它会用两个参数填充该函数;第一个是索引,第二个是元素。所以目前你手头的变量n是一个整数,而不是一个元素。

var addresslines=$('.info').children('p').filter(function(n, el){ 
  if(!$(el).hasClass('phone') && !$(el).hasClass('fax')){
    return el;
  }
});

工作小提琴

于 2014-07-22T01:27:00.573 回答
1

的第一个参数filter是索引而不是元素,因此您应该将代码更改为:

var addresslines=$(.info).children('p').filter(function(n){ 
    if(!$(this).hasClass('phone') && !$(this).hasClass('fax')){
        return true;
    }
});

工作小提琴:http: //jsfiddle.net/2cPLK/1/

于 2014-07-22T01:38:35.130 回答