我有一个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个元素都不具有“ phone”或“ fax”类。
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/

最佳答案

当过滤器将函数作为参数时,它将使用两个参数填充该函数;第一个是索引,第二个是元素。因此,当前您拥有变量n的是整数,而不是元素。

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


working fiddle

09-20 16:06